簡單敘述了在開發過程中遇到的 autoresizing 及 autoresizingMask 相關的問題 ...
1、前言
當一個控制項設置好 frame,然後出現會 frame 顯示不准或是跟隨父控制項的變化而變化了,你就要考慮是否是 autoresizing 的問題了
當在 xib 中佈局時,報 NSAutorelesizingMaskLayoutConstraint、NSLayoutConstraint 等一堆約束相關的錯誤,就有可能是某個控制項的 autoresizing 在作怪
2、什麼是 autoresizing 及 autoresizingMask 屬性
iOS有兩大自動佈局利器:autoresizing 和 autolayout(autolayout是iOS6以後新增), 對於現在來說,autoresizingMask 幾乎是不會去用的
UIViewAutoresizing 屬性
public struct UIViewAutoresizing : OptionSetType {
public init(rawValue: UInt)
public static var None: UIViewAutoresizing { get }
public static var FlexibleLeftMargin: UIViewAutoresizing { get }
public static var FlexibleWidth: UIViewAutoresizing { get }
public static var FlexibleRightMargin: UIViewAutoresizing { get }
public static var FlexibleTopMargin: UIViewAutoresizing { get }
public static var FlexibleHeight: UIViewAutoresizing { get }
public static var FlexibleBottomMargin: UIViewAutoresizing { get }
}
- 當 .FlexibleHeight 和 .FlexibleWidth 同時滿足時,該控制項的 autoresizingMask 的值是 18,一般控制項預設有的 autoresizingMask 的值就是18 ,高、寬會隨著父控制項的變化而變化,高、寬擁有自動伸縮功能
3、哪些 view 的 autoresizingMask 預設是18呢
從 xib 里創建出來的預設的 view( xcode 預設創建出來的 view)
控制器的 view (預設控制器的view autoResizingMask = 18 的,當屏幕打橫時 ,他是會隨著父控制項 window 的屏幕變化一起變化)
4、設置 autoresizingMask 為 none
初始化控制項時,代碼直接設置該屬性
代碼創建的 view ,autoresizingMask = 0
自己創建空白的xib ,然後手動拖個view 進去,這時autoresizingMask = 0
先取消 AutoLayout ,然後 xcode 里就會顯示出 autoresizing 的控制面板,然後取消相應的約束,在勾選使用 AutoLayout