iOS sizeToFit 和 sizeThatFits的区别

sizeToFit: 会计算出最优的 size 而且会改变自己的size

UILabel *label = [[UILabel alloc] initWithFrame:CGRectMake(100, 100, 0, 0)];
label.backgroundColor = UIColor.grayColor;
label.font = [UIFont systemFontOfSize:20];
label.text = @"北京欢迎你!!!";

//sizeToFit: 直接改变了label的宽和高, 使它根据上面的字符串的大小做合适的改变
[label sizeToFit];

NSLog(@"width = %.0f height = %.0f",label.frame.size.width, label.frame.size.height);
[self.view addSubview:label];

//输出结果:
width = 119 height = 24

注意: 使用sizeToFit时, 一定要设置控件的frame, 并且不可以使用Masonry, 否则sizeToFit将失效

sizeThatFits: 会计算出最优的 size 但是不会改变 自己的size

UILabel *label = [[UILabel alloc] initWithFrame:CGRectMake(100, 100, 0, 0)];
label.backgroundColor = UIColor.grayColor;
label.font = [UIFont systemFontOfSize:20];
label.text = @"北京欢迎你!!!";

//sizeThatFits并没有改变原始label的大小
CGSize sizeThatFits =  [label sizeThatFits:CGSizeZero];
NSLog(@"sizeThatFits: width = %.1f height = %.1f", sizeThatFits.width, sizeThatFits.height);

NSLog(@"label: width = %.1f height = %.1f",label.frame.size.width, label.frame.size.height);

[self.view addSubview:label];


输出结果:
sizeThatFits: width = 119.0 height = 24.0
label: width = 0.0 height = 0.0

原文: https://zhuanlan.zhihu.com/p/32257003

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容