美文网首页
[iOS]sizeToFit 与 sizeThatFit

[iOS]sizeToFit 与 sizeThatFit

作者: 汴城码农 | 来源:发表于2021-03-05 16:32 被阅读0次

    先看官方

    - (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);
        }];
    

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


    WechatIMG81.png

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

    相关文章

      网友评论

          本文标题:[iOS]sizeToFit 与 sizeThatFit

          本文链接:https://www.haomeiwen.com/subject/ewzrqltx.html