先看看苹果官方文档对这连个的方法的解释:
- (CGSize)sizeThatFits:(CGSize)size;
return 'best' size to fit given size. does not actually resize view. Default is return existing view size
- (void)sizeToFit;
calls sizeThatFits: with current view bounds and changes bounds size.
意思是说,sizeThatFits: 会计算出最优的 size 但是不会改变 自己的 size,而 sizeToFit: 会计算出最优的 size 而且会改变自己的 size。那么两者的联系是什么呢?
实际上,当调用 sizeToFit 后会调用 sizeThatFits 方法来计算 UIView 的 bounds.size 然后改变 frame.size。也就是说,其实我们也可以不使用 [ label sizeToFit] 来计算 label 内容的 size ,首先调用 sizeThatFits 方法或者一个 CGSize 然后改变 label.frame.size 就可以得到 [label sizeToFit]一样的效果。