Autoresizing

  • autoresizingMask无论是在storyboard中实现还是用代码实现,本质上来说就是六条线

  • 在storyboard中使用autoresizingMask需要将Autolayout禁用掉。

  • 如图:

    图中共有六条线

    如果上下左右的线中的某一条选中,则表示距离父控件的边界的距离不变。

    比如图中选中的线,表示蓝色view距离self.view左边界上边界的距离不变。

    如果同时选中上下左右的线,那么行为会和选中上左的线是一样的,也就是默认的行为。

    如果想让子控件尺寸跟随父控件尺寸改变而改变,那么需要用到内部的两条线。内部的线表示允许控件在水平和垂直方向上可拉伸。如果不选中内部的线,说明是不希望控件可拉伸的,也就是固定大小的。

  • 也就是说,周围的线选中表示固定距离,内部的线选中表示允许拉伸

  • 如果用代码设置autoresizingMask,会发现一个view的autoresizingMask属性是一个枚举:

    UIViewAutoresizingNone                 = 0,
    UIViewAutoresizingFlexibleLeftMargin   = 1 << 0,
    UIViewAutoresizingFlexibleWidth        = 1 << 1,
    UIViewAutoresizingFlexibleRightMargin  = 1 << 2,
    UIViewAutoresizingFlexibleTopMargin    = 1 << 3,
    UIViewAutoresizingFlexibleHeight       = 1 << 4,
    UIViewAutoresizingFlexibleBottomMargin = 1 << 5
    

    除了第一个是None,剩下的六个就对应storyboard中的六条线。

  • 注意上面

    UIViewAutoresizingFlexibleWidth
    UIViewAutoresizingFlexibleHeight
    

    这是正好和storyboard中设置autoresizingMask中内部的两天线是一致的:可拉伸的宽度和高度。

    剩下的需要注意一下:

    UIViewAutoresizingFlexibleLeftMargin 
    UIViewAutoresizingFlexibleRightMargin  
    UIViewAutoresizingFlexibleTopMargin    
    UIViewAutoresizingFlexibleBottomMargin
    

    在storyboard中,如果选中周围的线,表示距离固定。比如我选中了左边的线,那么表示我想要左边的距离固定,所以在代码中我应该选择UIViewAutoresizingFlexibleRightMargin,即表示右边的距离不固定,那么则默认左边的距离固定

  • autoresizingMask的缺点是只能保证父控件和子控件间的关系,无法保证同级控件间的关系,也就是说有些需求,autoresizingMask是无法实现的。更多的精力应该放在Autolayout上。

你可能感兴趣的:(Autoresizing)