1. header file
# Import <Foundation/Foundation. h>
Typedef enum verticalignment {
VerticalAlignmentTop,
Verticalignmentmiddle,
Verticalignmentbottom,
} VerticalAlignment;
@ Interface VerticallyAlignedLabel: UILabel
{
@ Private
Verticalignment _;
}
@ Property (nonatomic, assign) verticalignment;
@ End
. M file
# Import "VerticallyAlignedLabel. h"
@ Implementation VerticallyAlignedLabel
@ Synthesize verticalignment = verticalignment _;
-(Id) initWithFrame :( CGRect) frame
{
Self = [super initWithFrame: frame];
If (self)
{
Self. verticalAlignment = verticalignmentmiddle;
}
Return self;
}
-(Void) setVerticalAlignment :( VerticalAlignment) verticalignment
{
VerticalAlignment _ = verticalignment;
[Self setNeedsDisplay];
}
-(CGRect) textRectForBounds :( CGRect) bounds limitedToNumberOfLines :( NSInteger) numberOfLines
{
CGRect textRect = [super textRectForBounds: bounds limitedToNumberOfLines: numberOfLines];
Switch (self. verticalAlignment ){
Case VerticalAlignmentTop:
TextRect. origin. y = bounds. origin. y;
Break;
Case VerticalAlignmentBottom:
TextRect. origin. y = bounds. origin. y + bounds. size. height-textRect. size. height;
Break;
Case VerticalAlignmentMiddle:
// Fall through.
Default:
TextRect. origin. y = bounds. origin. y + (bounds. size. height-textRect. size. height)/2.0;
}
Return textRect;
}
-(Void) drawTextInRect :( CGRect) requestedRect
{
CGRect actualRect = [self textRectForBounds: requestedRect limitedToNumberOfLines: self. numberOfLines];
[Super drawTextInRect: actualRect];
}
@ End
From dread