美文网首页基础应用
iOS使用Masonry在模拟器里约束不起作用

iOS使用Masonry在模拟器里约束不起作用

作者: 颠趴高手 | 来源:发表于2019-03-27 10:28 被阅读68次

    Masonry,一款制造UI布局的利器,相信不少iOS开发者都了解或使用过。然而笔者在使用过程中偶然发现,在模拟器里部分视图的约束不起作用甚至数值出错导致布局错乱,而在真机里却能正常显示。
    后来查了一手资料,找到了解决方法,如下:


    [self.view layoutIfNeeded];
    

    给视图设定完约束后加上如上一行代码即可。
    完整示例如下:

    [self.view addSubview:self.timeLabel];
    [self setNeedsUpdateConstraints];
    [self.timeLabel mas_makeConstraints:^(MASConstraintMaker *make) {
            ...
    }];
    [self updateConstraints]; // 重写updateConstraints函数就用super
    [self.view layoutIfNeeded];
    

    这里要注意下,是要调用父视图的layoutIfNeeded。调用子视图有时也可以,但会出现数值偏差的情况。


    自己的结论:layoutIfNeeded可以让视图的约束立刻生效。由于模拟器的性能较低,约束还未生效就显示了视图才导致现象的产生。而真机性能较高,能较快的使约束生效。(纯属推测的,哈哈...)

    搬来的结论:
    1、如果要立即刷新,要先调用[view setNeedsLayout],把标记设为需要布局,然后马上调用[view layoutIfNeeded],实现布局。
    2、在视图第一次显示之前,标记肯定是“需要刷新”的,所以直接调用[view layoutIfNeeded]就会进行立即更新。

    相关文章

      网友评论

        本文标题:iOS使用Masonry在模拟器里约束不起作用

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