前言:相信很多小伙伴在使用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>"
)
于是乎。。。。,修改吧,去掉那些煩人??的約束警告。