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

未完,待继续整理

posted @ 2016-08-18 21:46  HOWIE-CH  阅读(671)  评论(0编辑  收藏  举报