美文网首页
masonry快速定位冲突办法

masonry快速定位冲突办法

作者: hanyongwei | 来源:发表于2023-08-31 17:00 被阅读0次

    前言:相信很多小伙伴在使用Masonry布局都会遇到这种无问题:页面通常也会正常显示,控制台会打印出一堆警告的信息,看着很是头疼。

    如何定位出错的是哪个控件约束呢?

    微博上看到Lefe_x#iOS知识小集#里面的一篇 「 如何快速定位哪个 View 出现了约束警告? 」 解决方法:
    就是把 View 的内存地址换成了具体的 View,其实我们可以通过 Xcode 中的 【Debug View Hierarchy】,根据约束警告的内存地址(比如:0x147f56930)找到内存地址对应的 View(),把内存地址粘贴到搜索框,然后一样做替换操作,即可解决约束警告。

    这个【Debug View Hierarchy】(不明白的小伙伴点击这个)也就是Xcode自带的视图调试功能,可以让开发者看到视图的层次,控件的大小和位置,而且会以3D效果显示当前视图的层次。

    不过还有另一种方法:就是使用Masonry自带的 MASAttachKeys 宏来给view添加key,然后有约束警告的话就会知道具体哪个View布局有问题。

    UIButton *btn1 = [UIButton buttonWithType:UIButtonTypeCustom ];
    btn1.backgroundColor = [UIColor redColor];
    MASAttachKeys(btn1);//Masonry 布局冲突快速定位,设置key必须在布局之前设置,否则无效!
    //btn1.mas_key = @"btn1"; 或者这样设置
    [self.view addSubview:btn1];
    [btn1 mas_makeConstraints:^(MASConstraintMaker *make) {
        make.left.top.offset(80);
        make.size.mas_equalTo(CGSizeMake(100, 100));
    }];
    //    制造约束冲突
    [btn1 mas_makeConstraints:^(MASConstraintMaker *make) {
        make.left.top.offset(100);
        make.size.mas_equalTo(CGSizeMake(100, 100));
    }];
    

    控制台打印:

    (
    "<MASLayoutConstraint:0x6000000b1640 UIButton:btn1.left == UIView:0x7ff608e02720.left + 80>",
    "<MASLayoutConstraint:0x6000000b1d60 UIButton:btn1.left == UIView:0x7ff608e02720.left + 100>"
    )

    于是乎。。。。,修改吧,去掉那些烦人😠的约束警告。

    来源:Dxc_iOS

    相关文章

      网友评论

          本文标题:masonry快速定位冲突办法

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