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

本文介绍了一种改进UILabel的实现,通过重写drawInRect方法,实现在不同高度下文本始终保持顶部对齐,并允许设置左右边距。作者探讨了现有解决方案的不足,提出了一个灵活性更高且扩展性强的定制UILabel类实例。
摘要由CSDN通过智能技术生成

背景:在开发过程中有一个让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];

运行结果:

9b5d49ed5050

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值