前言:相信很多小伙伴在使用Masonry布局都會(huì)遇到這種無(wú)問(wèn)題:頁(yè)面通常也會(huì)正常顯示,控制臺(tái)會(huì)打印出一堆警告的信息,看著很是頭疼。
如何定位出錯(cuò)的是哪個(gè)控件約束呢?
微博上看到Lefe_x的#iOS知識(shí)小集#里面的一篇 「 如何快速定位哪個(gè) View 出現(xiàn)了約束警告? 」 解決方法:
就是把 View 的內(nèi)存地址換成了具體的 View,其實(shí)我們可以通過(guò) Xcode 中的 【Debug View Hierarchy】,根據(jù)約束警告的內(nèi)存地址(比如:0x147f56930)找到內(nèi)存地址對(duì)應(yīng)的 View(),把內(nèi)存地址粘貼到搜索框,然后一樣做替換操作,即可解決約束警告。
這個(gè)【Debug View Hierarchy】(不明白的小伙伴點(diǎn)擊這個(gè))也就是Xcode自帶的視圖調(diào)試功能,可以讓開(kāi)發(fā)者看到視圖的層次,控件的大小和位置,而且會(huì)以3D效果顯示當(dāng)前視圖的層次。
不過(guò)還有另一種方法:就是使用Masonry自帶的 MASAttachKeys 宏來(lái)給view添加key,然后有約束警告的話就會(huì)知道具體哪個(gè)View布局有問(wèn)題。
UIButton *btn1 = [UIButton buttonWithType:UIButtonTypeCustom ];
btn1.backgroundColor = [UIColor redColor];
MASAttachKeys(btn1);//Masonry 布局沖突快速定位,設(shè)置key必須在布局之前設(shè)置,否則無(wú)效!
//btn1.mas_key = @"btn1"; 或者這樣設(shè)置
[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));
}];
控制臺(tái)打?。?/p>
(
"<MASLayoutConstraint:0x6000000b1640 UIButton:btn1.left == UIView:0x7ff608e02720.left + 80>",
"<MASLayoutConstraint:0x6000000b1d60 UIButton:btn1.left == UIView:0x7ff608e02720.left + 100>"
)
于是乎。。。。,修改吧,去掉那些煩人??的約束警告。
來(lái)源:Dxc_iOS