iOSLabel文字自适应高度自适应

第一步:创建UILabel对象,并设置一些基本设置

        UILabel *label = [[UILabel alloc] init];

        label.text = @"8月29日,在雅加达亚运会电子竞技表演赛英雄联盟项目决赛中,中国团队3-1击败韩国队获得冠军,这场来之不易的胜利占据了微博热搜,也刷屏了朋友圈!";

        label.textColor =RGBA(64, 64, 64, 1);

第二步:进行一些关键参数设置

        label.numberOfLines = 0;  //这里选择零,意思是可以多行显示。如果为1,则只能显示一行,多出的文字会以...代替

        //lineBreakMode:设置标签文字过长时的显示方式。 
        //label.lineBreakMode = NSLineBreakByCharWrapping;    //以字符为显示单位显示,后面部分省略不显示。 
        //label.lineBreakMode = NSLineBreakByClipping;        //剪切与文本宽度相同的内容长度,后半部分被删除。 
        //label.lineBreakMode = NSLineBreakByTruncatingHead;    //前面部分文字以……方式省略,显示尾部文字内容。 
        //label.lineBreakMode = NSLineBreakByTruncatingMiddle;    //中间的内容以……方式省略,显示头尾的文字内容。 
        //label.lineBreakMode = NSLineBreakByTruncatingTail;    //结尾部分的内容以……方式省略,显示头的文字内容。 
        //label.lineBreakMode = NSLineBreakByWordWrapping;    //以单词为显示单位显示,后面部分省略不显示。

        label.lineBreakMode = NSLineBreakByTruncatingTail;//结尾部分的内容以……方式省略,显示头的文字内容。

        CGSize maximumLabelSize = CGSizeMake(100, 9999);//labelsize的最大值:这里宽度最大为100px,高度最大为9999px,文本超出宽度为100时会自动换行。

//关键语句

        CGSize expectSize = [label sizeThatFits:maximumLabelSize];//这里会得到一个由label文本长度计算出来的一个宽高的CGSize结构体。

        //别忘了把frame给回label,如果用xib加了约束的话可以只改一个约束的值

        label.frame = CGRectMake(30, 30, expectSize.width, expectSize.height);

        label.font = [UIFont systemFontOfSize:15];

到此基本就打工搞成了!
————————————————

第一种: 

UILabel *label = [[UILabel alloc] init];  

label.backgroundColor = [UIColor colorWithRed:0.1 green:0.1 blue:0.1 alpha:1]; 

label.text = @"大师傅好搜啊发"; 

label.numberOfLines = 0; 

CGSize size = CGSizeMake(100, MAXFLOAT);//设置高度宽度的最大限度 CGRect rect = [label.text boundingRectWithSize:size options:NSStringDrawingUsesFontLeading|NSStringDrawingTruncatesLastVisibleLine|NSStringDrawingUsesLineFragmentOrigin attributes:@{NSFontAttributeName : [UIFont systemFontOfSize:20]} context:nil];

label.frame = CGRectMake(100, 100, rect.size.width, rect.size.height);  self.view addSubview:label];

其实就是使用- (CGRect)boundingRectWithSize:(CGSize)size options:(NSStringDrawingOptions)options attributes:(nullable NSDictionary*)attributes context:(nullable NSStringDrawingContext *)context 这个方法

参数:

size:宽高限制,用于计算文本绘制时占据的矩形块。

options: 文本绘制时的附加选项

NSStringDrawingUsesLineFragmentOrigin//整个文本将以每行组成的矩形为单位计算整个文本的尺寸   

 NSStringDrawingUsesFontLeading//以字体间的行距

NSStringDrawingUsesDeviceMetrics //计算文本尺寸时将以每个字或字形为单位来计算。  

 NSStringDrawingTruncatesLastVisibleLine//计算文本尺寸时将以每个字或字形为单位来计算。

可以组合试一下达到自己想要的效果

attributes:对字体、颜色、行距、字间隔等等一些设置,使用字典来做一些属性设置

context:上下文,该参数可为 nil 。

第二种:

UILabel *label = [[UILabel alloc] initWithFrame:CGRectMake(100, 100, 100, 0)];

label.backgroundColor = [UIColor colorWithRed:0.1 green:0.1 blue:0.1 alpha:1];

label.text = @"我会自己去适应";

label.numberOfLines = 0;

[label sizeToFit];

[self.view addSubview:label];

其实就是使用 [label sizeToFit];让label自己去适应

或者使用sizeThatFits:方法自己定义宽高

CGSize size = [label sizeThatFits:CGSizeMake(100, MAXFLOAT)];

label.frame = CGRectMake(100, 100, size.width, size.height);

第三种:

UILabel *label = [[UILabel alloc] init];

label.backgroundColor = [UIColor colorWithRed:0.1 green:0.1 blue:0.1 alpha:1];

label.text = @"我会自己去适应宽度的";

label.font = [UIFont systemFontOfSize:50];

CGSize size = [label.text sizeWithAttributes:@{NSFontAttributeName: [UIFont systemFontOfSize:50]}];

//ceilf()向上取整函数, 只要大于1就取整数2. floor()向下取整函数, 只要小于2就取整数1.

CGSize adaptionSize = CGSizeMake(ceilf(size.width), ceilf(size.height));

label.frame = CGRectMake(100, 100, adaptionSize.width, adaptionSize.height);

[self.view addSubview:label];

这种方法只能适应一行的宽高,高度也是根据字体的大小来变化的



 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值