?1.約束創建的控件在-ViewDidAppear:可獲得真是Frame,或者在手動調用-layoutIfNeeded方法后獲得真是Frame
最初做開發的時候,經常使用的是用Frame做屏幕適配,包括后來的大屏幕等等是通過frame的比例來進行的適配,使用起來也算方便,后來蘋果出了AutoLayout技術,以及隨后的Masonry。
最初使用Masonry的時候,發現使用Masonry約束完的控件并沒有Frame值(沒調用layoutIfNeeded)方法,當時簡單的了解一下自動布局的原理,簡單說就是相對位置。而使用Frame布局是直接就是有布局的位置值的。
注:當使用約束創建的控件時,在視圖加載完成時(-viewDidAppear:)能正確獲得控件的Frame;或者在約束完畢時調用-layoutIfNeeded方法也能立馬獲得控件的Frame
2.StoryBoard加載控制器View的大小是屏幕的大小,Xib加載控制器View的大小是Xib的大小。
在StoryBoard里面加載的控制器的View的時候,在-viewDidLoad:方法里,打印View的Frame發現此時的Frame是屏幕的Bounds,是符合正常邏輯的,但是如果用控制器的View是xib初始化的,那么在-viewDidLoad:方法里面打印View的Frame發現此時的Frame是xib的大小,可以在-viewDidload:里先噶變View的大小,醉了。
3.用約束創建控件,不要用Frame的方式去更改。
用約束創建一個控件,但是此時如果在某個方法里面手動使用Frame的方式修改控件的位置,那么在手動旋轉屏幕之后,控件的位置又會回到最初約束的狀態,Frame方式失效。
總結:如果一個控件使用約束的方式布局,那么它的同級(父視圖相同)布局最好也是用相同的布局方式,不要在這里同時混用Frame和約束(兩者則其一使用)