- (sCGSize)sizeThatFits:(CGSize)size 和 - (void)sizeToFit方法

- (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的大小View的实际大小改变




具体的来看代码吧:

@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

你可能感兴趣的:(- (sCGSize)sizeThatFits:(CGSize)size 和 - (void)sizeToFit方法)