AutoLayout的一些注意事項

2022-08-05 06:18:17 字數 1240 閱讀 3502

要了解autolayout 首先要知道程式檢視啟動順序:

-(void)updateviewconstraints

-(void)viewdidlayoutsubviews

updateviewconstraints方法中進行檢視上布局計算,得出各個控制項的frame.但是此時並沒有將這些frame賦值給各個控制項。在viewdidlayoutsubviews方法中,各個控制項的frame賦值已經完成,但是並不是在這個方法中賦值的。

如果我們要**新增控制項和約束,別忘了先去除控制項的autoresizing ,否則會報出警告,因為二者會存在約束衝突。translatesautoresizingmaskintoconstraints=no **新增控制項還應注意,控制項的建立和新增應在updateviewconstraints 方法之前。否則 每次新增控制項都會觸發updateviewconstraints方法,導致介面會抖動,以及出現不期望的結果。當我們使用自動布局時還應注意,控制項分為兩種,一種是固定寬高的,另一種是不固定的依靠自身內容決定寬高的。比如 開關控制項就是個固定大小的,它的大小就是那麼大,不會改變。對於這種控制項,我們只需要設定它的左邊和上邊的位置就可以了,設定好之後,這個控制項還可以作為其他控制項的約束參照。但是比如label 這樣根據內容決定寬高的控制項,雖然在有內容時候,它也可以只設定左邊和上邊的距離,但是它不能作為其他控制項的參照了,除非鎖定了它的寬高。比如 我們設定label ,距離左邊父控制項 20 ,距離上邊父控制項20.那麼假如我們有另乙個控制項(假定為button)我們不可以設定button 距離左邊這個label 20。自動布局中大多數控制項都是好設定的,但是比較難搞的時scrollview 。因為它是靠自身內容的大小來決定它的大小的。比如,我們設定了scrollview  距離左上下右的距離都是20 ,那麼它會提示警告。解決的辦法之一就是在scrollview內部再新增乙個容器view,將這個view設定為與scrollview 完全貼近。然後將這個view的大小改為我們所需要的contentview的大小。最後再這個view中新增控制項即可實現滾動。
總體來說自動布局很好地解決了螢幕適配 ,尤其是橫豎屏切換的問題。大大簡化了我們的計算**,但是我們又有多少應用是同時支援橫豎屏的呢?而且自動布局使我們介面的動畫及控制項的動態建立都收到了極大的影響,儘管這些影響都能解決,但是還是不如計算frame方便。而且自動布局儘管引入了vfl 語言簡化**,但是約束設定錯誤的話真的是很難查,如果我們需要使用動畫的話,需要將約束設定為屬性。設定成屬性的話,不如計算frame方便。如果你數學不是很差的話,建議你還是使用計算frame 來布局吧

AutoLayout 的一些坑

1.給乙個 uiview 加約束,希望它顯示在 uitableview 的底部,但是它不顯示,它會出現在 uitableview 的頂部。錯誤 1 self.tableview addsubview self.adjustview 23 self.adjustview mas makeconstra...

C 一些注意的地方

1 vector記憶體分配策略 以最小的代價連續儲存,每當vector不得不分配新的儲存空間時,以加倍當前容量的分配策略實現重新分配 2 類 必須對任何const或引用型別成員以及沒有預設建構函式的類型別的任何成員使用初始化式 建構函式初始化列表。3 explicit 抑制由建構函式定義的隱式轉換,...

c string類的一些注意

c語言中的字串基本都是字元型陣列,並且總是以二進位制0作為結束符,c 中string隱藏了它所包含的字串行的物理表現,包含了資料容量及儲存位址的 內務處理 資訊。標準庫的string類提供了3個成員函式來從乙個string得到c型別的字元陣列 c str data copy p,n 1.c str ...