UIView布局

布局的三种方式

1.frame绝对布局
2.frame + autoResizing布局
3.autoLayout

frame

原始位置
redView:frame(0,0,300,300) bounds:(0,0,300,300)
blueView:frame(0,0,100,100) bounds:(0,0,100,100)


UIView布局_第1张图片
1.1.png
  1. *修改父view的bounds.orgin的值,父view的位置不会修改,子view在父view中显示的位置会改变,但相应的位置信息不会改变。修改子view的bounds.orgin不会影响父view的位置。
    修改redView的bounds为(-20,-20,300,300),效果如图1.2


    UIView布局_第2张图片
    1.2.png
  2. 修改父view的bounds.size的值,父view的center不变,frame相应改变。
    修改redView的bounds为(0,0,150,150),效果如图1.3


    UIView布局_第3张图片
    1.3.png

autoResizing

    @property(nonatomic) BOOL autoresizesSubviews; // default is YES. if set, subviews are adjusted according to their autoresizingMask if self.bounds changes
    @property(nonatomic) UIViewAutoresizing autoresizingMask; // simple resize. default is UIViewAutoresizingNone
    typedef NS_OPTIONS(NSUInteger, UIViewAutoresizing) {
        UIViewAutoresizingNone                 = 0,
        UIViewAutoresizingFlexibleLeftMargin   = 1 << 0,
        UIViewAutoresizingFlexibleWidth        = 1 << 1,
        UIViewAutoresizingFlexibleRightMargin  = 1 << 2,
        UIViewAutoresizingFlexibleTopMargin    = 1 << 3,
        UIViewAutoresizingFlexibleHeight       = 1 << 4,
        UIViewAutoresizingFlexibleBottomMargin = 1 << 5
    };

使用autoresizing需要在stroyboard等可视化界面中,File inspector下,取消Use Size Class选项。


UIView布局_第4张图片
2.1.png
  1. autoResizing可以使view根据实际的屏幕尺寸,来自动调整 子控件和父控件之间的间距/子空间的宽高。不能用来设置同级视图之间的位置关系(iOS6之后的autoLayout可以设置任意两个控件之间的关系)。

  2. Autoresizing栏,外部四条边用来设置view的top/left/bottom/right和其父视图的间距是否固定,内部的两条边用来设置view的width/height是否会随着父视图尺寸的改变自动调整。


    UIView布局_第5张图片
    2.2.png
  3. autoResizing必须在320x480的屏幕上初始化布局,否则在比例缩放时会发生错误。因为autoResizing是在Retina显示屏出现之前,主要用来做横竖屏适配的。

autoLayout

使用autoresizing需要在stroyboard等可视化界面中,File inspector下勾选Use Auto Layout。


UIView布局_第6张图片
3.1.png
  1. iOS6系统下出现autoLayout布局,通过添加约束对象,可以设置任何控件之间的关系。
  2. autoLayout引用的目的是替代autoResizing的使用,所以需要关闭autoResizing的属性。
  3. Constrain to margins
    Xcode 8.0版本,视图与ViewController根视图之间 左右间距的系统推荐的间距值为 16pt。在Xcode 8.0 之前版本,推荐间距值为 20pt。
    Xcode 8.0 版本及之前版本,两个普通父子视图之间 上下左右间距的系统推荐的间距值都为 8pt。

你可能感兴趣的:(UIView布局)