iOS定位處理約束沖突

前言

在做項(xiàng)目的時(shí)候,無意間看到自動(dòng)布局約束警告,開始也也覺得沒什么,雖然有警告,但并不影響UI展示效果。但是越來越有代碼潔癖的我,也忍受不了控制臺(tái)輸出一大堆約束警告Log,于是就查閱如何定位解決約束沖突,同時(shí)自己也記錄下來。下面開始介紹具體操作步驟吧。

一、添加UIViewAlertForUnsatisfiableConstraints斷點(diǎn)

  • 添加Symbolic Breakpoints
    屏幕快照 2018-06-04 下午2.44.35.png
  • 編輯斷點(diǎn)symbol填入
UIViewAlertForUnsatisfiableConstraints
  • 添加控制臺(tái)打印action
po [[UIWindow keyWindow] _autolayoutTrace]
屏幕快照 2018-06-04 下午2.44.50.png

二、定位約束警告沖突

  • 添加好斷點(diǎn)之后,當(dāng)界面有約束沖突,就會(huì)觸發(fā)斷點(diǎn),控制打印如下:
[LayoutConstraints] Unable to simultaneously satisfy constraints.
    Probably at least one of the constraints in the following list is one you don't want. 
    Try this: 
        (1) look at each constraint and try to figure out which you don't expect; 
        (2) find the code that added the unwanted constraint or constraints and fix it. 
(
    <MASLayoutConstraint:0x604000ab04a0 UIButton:0x7faf99f04010.width == 40>,
    <MASLayoutConstraint:0x604000ab66e0 UIButton:0x7faf99f04010.left == CYBButtonView:0x7faf99f83360.left + 10>,
    <MASLayoutConstraint:0x604000abaa00 UILabel:0x7faf99f5f8e0.left == UIButton:0x7faf99f04010.right>,
    <MASLayoutConstraint:0x604000abd580 UILabel:0x7faf99f5f8e0.left == CYBButtonView:0x7faf99f83360.left + 15>,
)

Will attempt to recover by breaking constraint 
<MASLayoutConstraint:0x604000ab04a0 UIButton:0x7faf99f04010.width == 40>

Make a symbolic breakpoint at UIViewAlertForUnsatisfiableConstraints to catch this in the debugger.
The methods in the UIConstraintBasedLayoutDebugging category on UIView listed in <UIKit/UIView.h> may also be helpful.
  • 根據(jù)提示,找到約束有問題的控件地址0x7faf99f04010,然后全局搜索,就能找到具體是哪個(gè)控件
  • 如果控制臺(tái)打印不夠直觀看出是哪個(gè)控件約束有問題,我們可以通過 LLDB命令工具chisel定位尋找。

三、解決沖突

通常解決沖突的方法有:

  • 刪除多余約束
  • 修改約束優(yōu)先級(jí)

參考

1、How to trap on UIViewAlertForUnsatisfiableConstraints?

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 1、通過CocoaPods安裝項(xiàng)目名稱項(xiàng)目信息 AFNetworking網(wǎng)絡(luò)請(qǐng)求組件 FMDB本地?cái)?shù)據(jù)庫組件 SD...
    陽明AI閱讀 16,210評(píng)論 3 119
  • 年輕人千萬不能碰的東西 1 知乎上有人問年輕人有哪些千萬不能碰的東西,翻了網(wǎng)友的回答,基本上確定了賭和毒是最為常見...
    生達(dá)成長規(guī)劃閱讀 930評(píng)論 0 4
  • 第一次去新疆是14年的五一,只有三天假,前后各翹了兩天,湊夠七天,就去了。記憶里,那個(gè)春天好像天氣自始至終都沒有好...
    跑反閱讀 964評(píng)論 0 1
  • 剛剛結(jié)束了一段工作關(guān)系,為期一個(gè)月。 相處不久的同事說,我好舍不得你走。人是感情動(dòng)物,一個(gè)月時(shí)間不長,但也不短。足...
    長耳朵的兔兔兔紙閱讀 1,011評(píng)論 0 0

友情鏈接更多精彩內(nèi)容