zoukankan      html  css  js  c++  java
  • 【ios入门】Masonry约束立即生效跟约束更新

    Masonry约束立即生效跟约束更新
    原创忝 最后发布于2016-11-14 16:42:07 阅读数 20941 收藏
    展开
    在使用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);

    得到的结果显示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);

    得到的结果显示:

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

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

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

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

    两个方法都是在父视图中使用的。
    ————————————————
    版权声明:本文为CSDN博主「忝」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
    原文链接:https://blog.csdn.net/u011415099/article/details/53160595

  • 相关阅读:
    单/多文档的窗体类属性修改(VC_MFC)
    RTTI 与消息机制(VC_MFC)
    对话框属性页(VC_MFC)
    插入符与路径(VC_MFC)
    重画控件与系统托盘图标编写(VC_MFC)
    颜色,文件和字体对话框(VC_MFC)
    ODBC 数据类型和API(VC)
    CTreeCtrl 和 CListCtrl 控件(VC_MFC)
    找回桌面清理向导清理多余IE图标
    win7任务栏缩略图消失的解决方法
  • 原文地址:https://www.cnblogs.com/mamamia/p/12188707.html
Copyright © 2011-2022 走看看