Autolayout简记

iPhone4之前

  • 没有适配,不用适配
  • 经常会出现坐标值写死的代码
//#define ScreenW 320
//#define ScreenH 480
#define ScreenW [UIScreen mainScreen].bounds.size.width
#define ScreenH [UIScreen mainScreen].bounds.size.height


// 创建一个显示在屏幕右下角的按钮
CGFloat buttonW = 100;
CGFloat buttonH = 50;
button.frame = CGRectMake(ScreenW - buttonW, ScreenH - buttonH, buttonW, buttonH);

iPad出现以后

  • 需要横竖屏适配
  • 出现了一种方便的屏幕适配技术:Autoresizing
    • 局限性:仅仅能解决子控件和父控件之间的相对关系问题

使用Autoresizing:

  • UIViewAutoresizingFlexibleLeftMargin = 1 << 0,
    • 距离父控件左边的间距是伸缩的
  • UIViewAutoresizingFlexibleRightMargin = 1 << 2,
    • 距离父控件右边的间距是伸缩的
  • UIViewAutoresizingFlexibleTopMargin = 1 << 3,
    • 距离父控件上边的间距是伸缩的
  • UIViewAutoresizingFlexibleBottomMargin = 1 << 5
    • 距离父控件下边的间距是伸缩的
  • UIViewAutoresizingFlexibleWidth = 1 << 1,
    • 宽度跟随父控件宽度进行伸缩
  • UIViewAutoresizingFlexibleHeight = 1 << 4,
    • 高度跟随父控件高度进行伸缩

iOS6开始(Xcode4开始)

  • 出现了一种新的屏幕适配技术:Autolayout
    • 解决任何控件之间的相对关系问题

iOS8开始(Xcode6开始)

  • 出现了一种新的屏幕适配技术:Sizeclass

Autolayout的2个核心概念

  • 约束

    • 尺寸约束
      • width约束
      • height约束
    • 位置约束
      • 间距约束(上下左右间距)
  • 参照

    • 所添加的约束跟哪个控件有关(相对于哪个控件来说)

常见单词

  • Leading -> Left -> 左边
  • Trailing -> Right -> 右边

UILabel实现包裹内容

  • 设置宽度约束为 <= 固定值
  • 设置位置约束
  • 不用去设置高度约束

使用Monsonry框架注意点:

make: 添加约束
remake:删除以前的约束,添加新的约束
updata: 修改某个已有的约束

小案例:

让两个view之间间距和它们距离父view间距一样。
可以使用以下技巧:添加三个看不见的view进去

Autolayout简记_第1张图片
Snip20150628_1.png

你可能感兴趣的:(Autolayout简记)