自定义UILabel的对齐方式要重写以下两个方法:
(1)、- (void)drawTextInRect:(CGRect)rect;
参数解释:rect:文本绘制的位置;
(2)、- (CGRect)textRectForBounds:(CGRect)bounds limitedToNumberOfLines:(NSInteger)numberOfLines;
参数解释:bounds:label的bounds;numberOfLines:label的numberOfLines
原理:方法(1)就是在rect对应的位置区域绘制文本,而方法(1)中的rect就是方法(2)的返回值,所以我们需要在方法2中重写rect的计算。
核心代码:
- (CGRect)textRectForBounds:(CGRect)bounds limitedToNumberOfLines:(NSInteger)numberOfLines {
CGRect textRect = [super textRectForBounds:bounds limitedToNumberOfLines:numberOfLines];
//重新计算textRect
return textRect;
}
- (void)drawTextInRect:(CGRect)rect {
CGRect actualRect = [self textRectForBounds:rect limitedToNumberOfLines:self.numberOfLines];
[super drawTextInRect:actualRect];
}