ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

Masonry约束立即生效跟约束更新

2020-06-23 20:52:00  阅读:785  来源: 互联网

标签:10 mas view1 make 约束 生效 Masonry self view


在使用Masonry的时候,默认情况下,设置的约束并不会立即生效,此时获得的所有的frame都为0。但在有的时候,我们需要获取此时的宽跟高,此时就要设置控件的约束立即生效。

    view1       =   [UIView new];
    [self.view addSubview:view1];
    [view1 mas_makeConstraints:^(MASConstraintMaker *make) {
        make.edges.equalTo(self.view).insets(UIEdgeInsetsMake(10, 10, 10, 10));
    }];
    view1.backgroundColor   =   [UIColor redColor];
    NSLog(@"%@",view1.description);
1
2
3
4
5
6
7
得到的结果显示frame为0:

<UIView: 0x7f9d20d0b650; frame = (0 0; 0 0); layer = <CALayer: 0x608000227900>>
1
所以需要在mas_makeConstraints之后用它的父视图调用layoutIfNeeded可以使得约束立即生效:

    view1       =   [UIView new];
    [self.view addSubview:view1];
    [view1 mas_makeConstraints:^(MASConstraintMaker *make) {
        make.edges.equalTo(self.view).insets(UIEdgeInsetsMake(10, 10, 10, 10));
    }];
    view1.backgroundColor   =   [UIColor redColor];
    [self.view layoutIfNeeded];
    NSLog(@"%@",view1.description);
1
2
3
4
5
6
7
8
得到的结果显示:

<UIView: 0x7fa8d8d05730; frame = (10 10; 394 716); layer = <CALayer: 0x60800003ca20>>
1
提示:layoutIfNeeded在自身也可以生效,不过可能会导致坐标不准确等后果,而用在父视图上不会发生问题。

关于约束更新:
约束更新内容简要写一些,不写详细代码了。

约束更新的内容需要写入mas_updateConstraints中,如果需要立即更新的话需要两个步骤1、updateConstraintsIfNeeded 2、layoutIfNeeded

如果需要产生动画效果的话,将layoutIfNeeded这个方法在[UIView animateWithDuration]中调用即可。

两个方法都是在父视图中使用的。
 

ps:

如果你发现mas_updateConstraints没有作用,那你可以换做mas_remakeConstraints,并将mas_makeConstraints和mas_updateConstraints的约束合在一起就可以了。

[item mas_remakeConstraints:^(MASConstraintMaker *make) {
        make.width.and.centerX.equalTo(self.view);
        make.top.offset = 30;

        make.height.equalTo(@200));
    }];
 来源:站长百科

标签:10,mas,view1,make,约束,生效,Masonry,self,view
来源: https://www.cnblogs.com/1994july/p/13184421.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有