第一种:

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

    labl.backgroundColor = [UIColor redColor];

    labl.numberOfLines = 0;

    labl.text = @"我要去何方,不知道未来该去向何方技术开发了我觉得觉得分开了房间诶哦 将哦鲋破紧凑积分破诶佛配叫婆婆佛教看到积分破鸡婆上微积分感觉就和 v 恶评用途容易投入IE哦排球排球打底衫;刚开始挂牌品味品味咖啡;了多少贫困的佛法快乐;的;朗诵评分坡水库;几个;饿哦佛山飞机送顾客评价婆婆哦精品佛陪外婆饿哦皮绒皮捅破哦开始破送配送商品时破哦我顽皮我我哦破我怕我陪婆婆破饿哦饿哦让破 i 人";

    CGSize size = [labl.text boundingRectWithSize:CGSizeMake(300,MAXFLOAT) options:NSStringDrawingUsesLineFragmentOrigin attributes:@{NSFontAttributeName:labl.font} context:nil].size;

      labl.frame = CGRectMake(0, 64,size.width,size.height);

    [self.view addSubview:labl];

使用- (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];

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




posted on 2018-05-08 15:34  强者VS弱者  阅读(133)  评论(0编辑  收藏  举报