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

你可能感兴趣的:(iOS sizeToFit 和 sizeThatFits的区别)