UILabel文字内容自定义布局(UILabel顶部对齐为例)

背景:在开发过程中有一个让UILabel无论高度多少,让文字内容始终在顶部。

解决方案:想到的解决方案也有很多,比如:用sizeToFit改变UILabel的高度、尾部强制补齐、UITextField或UITextView来替换UILabel。

对以上方案的分析:觉得以上方案都不是最优,而且比较粗暴,关键扩展性不高比较局限,只满足了文字内容在顶部。如果需求更改为底部对齐呢?

最优方案:重写UILabel的drawInRect方法

.h文件

#import 

NS_ASSUME_NONNULL_BEGIN

@interface WlcLable : UILabel

@end

NS_ASSUME_NONNULL_END

.m文件

#import "WlcLable.h"

@implementation WlcLable
- (id)initWithFrame:(CGRect)frame {
    return [super initWithFrame:frame];
}
- (CGRect)textRectForBounds:(CGRect)bounds limitedToNumberOfLines:(NSInteger)numberOfLines {
    CGRect textRect = [super textRectForBounds:bounds limitedToNumberOfLines:numberOfLines];
    //重写CGRect,根据自己的需求自由发挥
    //顶部对齐
    textRect.origin.y = bounds.origin.y;
    //顶部左边距
    textRect.origin.x = 10;
    textRect.size.width = self.frame.size.width - 10*2;
    return textRect;
}
-(void)drawTextInRect:(CGRect)requestedRect {
    CGRect actualRect = [self textRectForBounds:requestedRect limitedToNumberOfLines:self.numberOfLines];
    [super drawTextInRect:actualRect];
}
@end

方法调用

    WlcLable *label = [[WlcLable alloc] init];
    label.frame = CGRectMake(10, 100, 300, 300);
    label.text = @"顶部对齐,左边留白10像素";
    label.numberOfLines = 0;
    label.backgroundColor = [UIColor redColor];
    [self.view addSubview:label];

运行结果:


Simulator Screen Shot - iPhone SE (2nd generation) - 2020-08-12 at 14.54.49.png

你可能感兴趣的:(UILabel文字内容自定义布局(UILabel顶部对齐为例))