[iOS]sizeToFit 与 sizeThatFit

先看官方

- (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.

意思是说:

  • (CGSize)sizeThatFits:(CGSize)size; 会返回一个最适合的 Size,但是不会改变原来视图的frame 的size
  • (void)sizeToFit; 内部会调用 - (CGSize)sizeThatFits:(CGSize)size; 方法获取一个最适合的size, 并使用这个size 来调整当前视图的frame 的size.

简单的说:- (CGSize)sizeThatFits:(CGSize)size; 和 - (void)sizeToFit; 都或获取一个最适合的Size, 但是- (CGSize)sizeThatFits:(CGSize)size; 不会改变原始图的frame,仅仅是返回一个size, 而- (void)sizeToFit; 会为你计算一个最合适的Size的同时,并根据这个Size来调整你当前视图的frame

可以通过固定宽度或者高度,来自适应高度或者宽度

如果自适应不限制,调用- (void)sizeToFit即可。
如果存在最大高度需要如下使用sizeThatFits
注意:sizeThatFits:CGSizeMake(300, MAXFLOAT)给参数不能给CGSizeZero,否则会不换行,只会一行显示。

    _contentLabel = [[UILabel alloc] init];
    _contentLabel.numberOfLines = 0;
    _contentLabel.textColor = [UIColor grayColor];
    _contentLabel.font = [UIFont systemFontOfSize:15];
    _contentLabel.backgroundColor = [UIColor clearColor];
    [self addSubview:_contentLabel];
    [_contentLabel mas_makeConstraints:^(MASConstraintMaker *make) {
        make.top.mas_equalTo(_numberLabel.mas_bottom).mas_offset(0);
        make.left.mas_equalTo(bgView.mas_right).mas_offset(10);
        make.right.mas_offset(-10);
    }];
    _contentLabel.text = @"当设置多行显示时,两者又体现出区别,sizeThatFits并不会折行显示,sizeToFits会在设置的宽度内这行显示。这实际上又从另一方面验证了官方的解释。知其然,更要知其所以然,学习没有捷径,坚持和专研是硬道理,多分享则乐趣无穷!欢迎关注后续博文";
    
//    [_contentLabel sizeToFit];
    CGSize contenSize = [_contentLabel sizeThatFits:CGSizeMake(300, MAXFLOAT)];
    CGFloat contentHeight = contenSize.height;
    if (contenSize.height > 70) {
        contentHeight = 70;
    }
    [_contentLabel mas_updateConstraints:^(MASConstraintMaker *make) {
        make.height.mas_equalTo(contentHeight);
    }];

写的比较啰嗦,可以封装一下
运行效果如下:


[iOS]sizeToFit 与 sizeThatFit_第1张图片
WechatIMG81.png

这篇写的也好:https://blog.csdn.net/huangfei711/article/details/77435614

你可能感兴趣的:([iOS]sizeToFit 与 sizeThatFit)