1. 程式人生 > >autolayout中遇到的那些坑

autolayout中遇到的那些坑

坑1:使用autolayout,在viewdidload方法中獲取frame得到的數值並不是我們設定約束所期望的數值。

處理方法:因為viewdidload這個時候約束還沒有生效,所以我們要獲取到正確的數值需要在方法viewDidLayoutSubviews中獲取。

坑2:在tableviewcell等控制元件裡,awakeFromNib中仍然無法獲取正確的數值。

處理方法:在drawrect中獲取數值,如果還不對就呼叫一下重新佈局方法。如下: -setNeedsLayout方法: 標記為需要重新佈局,非同步呼叫layoutIfNeeded重新整理佈局,不立即重新整理,但layoutSubviews一定會被呼叫 -layoutIfNeeded方法:如果,有需要重新整理的標記,立即呼叫layoutSubviews進行佈局(如果沒有標記,不會呼叫layoutSubviews)

如果要立即重新整理,要先呼叫[view setNeedsLayout],把標記設為需要佈局,然後馬上呼叫[view layoutIfNeeded],實現佈局  

另外說一下scrollview使用autolayout。

(縱向滾動)如果想要滾動範圍自動調節,只需要把最下方的元素設定一個bottomconstraint到scrollview底部為0即可。

如果是最下方有多個元素top相等高度不同,視情況顯示隱藏某一個,那就以倒數第二個元素(假設叫bottomview)設定bottomconstraint到scrollview底部為0,之後在程式碼中設定這個約束的值為最後一個顯示元素的高度即可正常滾動。