- (sCGSize)sizeThatFits:(CGSize)size 和 - (void)sizeToFit方法
这两个方法声明在UIView中,所以所有UIView的子类都可以使用。但是具体每个方法是什么作用呢,这两个都可以调整空间的布局,但是还是有稍微的区别的。先看一下文档的描述:
- (sCGSize)sizeThatFits:(CGSize)size
文档上说:return 'best' size to fit given size. does not actually resize view. Default is return existing view size
意思就是: 返回一个最适合的大小以适应给定的size(个人没理解这个参数,一般传CGSzieZero),但是不调整视图的真正大小。默认值是返回最适合的视图大小
- (void)sizeToFit
文档上说:calls sizeThatFits: with current view bounds and changes bounds size
意思就是:调用sizeThatFits,根据目前的view的bounds来调整view的bounds的大小<strong>View的实际大小改变</strong>
</br>
</br>
具体的来看代码吧:
@interface ViewController ()
@property (strong, nonatomic) IBOutlet UIlabel *testLabel; //xib中设置大小为 (300,20)
@end
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
CGSize *size = [self.testLabel sizeThatFits:CGSizeZero];
NSLog(@"sizeThatFits = %f,%f",size.width,size.height);
//输出 sizeThatFits = 238.000,20.333
NSLog(@"after sizeThatFits labelSize = %f,%f",self.testLabel.frame.size.width,self.testLabel.frame.size.height);
//输出:after labelSize = 300.000,20.000
//可以看到显示的大小变了,但是实际的frame却没有变化
NSLog(@"-----------------------------------");
[self.testLabel sizeToFit];
NSLog(@"after sizeToFit labelSize = %f,%f",self.testLabel.frame.size.width,self.testLabel.frame.size.height);
//输出 after sizeToFit labelSize = 238.000,20.333
//可以看出 Label的实际大小也发生了变化
}
@end