前言:相信很多小伙伴在使用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
网友评论