遇到的 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