美文网首页
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