IOSday06 添加约束

Autoresizing

  • 四周的四根线的作用:

    • 只要勾选上某一根, 那么当前控件距离父控件的距离就是固定的, 当前是多少, 以后永远都是多少
  • 中间两条线的作用:

    • 只要勾选上水平方向的线, 那么当前控件的宽度就会随着父控件的宽度等比拉伸
    • 只要勾选上垂直方向的线, 那么当前控件的高度就会随着父控件的高度等比拉伸
  • 无论是将子控件固定在父控件的某一个位置
    还是让子控件随着父控件的宽高的变化而变化

    都是父子关系, 所以Autoresizing只能约束父子控件之间的关系, 不能约束兄弟控件之间的关系

注意: 代码中的上下左右和Storyboard中的是相反的
  • Storyboard中勾选上左边, 就代表当前控件和父控件的左边的距离是固定的
    而在代码中如果写上FlexibleLeftMargin, 就代表当前控件和父控件的左边是可拉伸的
    - 换句话说就是: 如果设置了FlexibleLeftMargin就代表着右边是固定的

    UIViewAutoresizingFlexibleLeftMargin左边可以伸缩

    UIViewAutoresizingFlexibleRightMargin 右边可以伸缩

    UIViewAutoresizingFlexibleTopMargin 顶部可以伸缩

    UIViewAutoresizingFlexibleBottomMargin 底部可以伸缩

  • 以下两个和Storyboard中的是一样的

    UIViewAutoresizingFlexibleWidth 宽度可以伸缩

    UIViewAutoresizingFlexibleHeight 高度可以伸缩


autolayout

  • 1.约束

    • 每在Storyboard中添加一个设置(autolayout的设置), 就代表添加一个约束
  • 2.错误(红色箭头)

    • 如果看到Storyboard中有红色的箭头, 代表约束有错误
    • 注意: 约束有错误, 不代表运行会错误, 约束有错误同样可以运行
      - 注意: 红色箭头是程序员必须解决的
  • 3.为什么会有约束错误?

    • 1缺少约束

    • 2约束冲突

    • 3.1缺少约束

      • autolayout的本质和frame差不多
      • 如果通过frame来设置一个控件, 必须设置这个控件的x/y/w/h, 控件才能按照我们的需求显示
      • 如果是通过autolayout来设置一个控件, 也必须设置这个控件的x/y/w/h, 控件才能按照我们的需求显示
      • 也就是说, 如果说x/y/w/h只要有一个没有设置都会报错, 就是缺少约束
    • 3.2约束冲突

      • 约束可以重复添加
      • 例如先约束宽度等于100, 又添加一个约束, 约束宽度等200, 那么就会报错
  • 4.警告

    • 如果看到Storyboard中有黄色的箭头, 就是警告
      • 代表着当前控件预览的位置或者尺寸和我们约束的位置尺寸不一样
      • 注意:黄金警告并不会影响我们运行
      • 注意:黄色箭头, 程序员可以忽略

VFL添加约束

VFL不支持乘除法

  • 3.利用VFL添加约束

    • VisualFormat: VFL语句
    • options: 对齐方式等
    • metrics: VFL语句中使用到的一些变量
    • views: VFL语句中使用到的一些控件
  • 3.1设置蓝色

    • 水平方向
     [self.view addConstraints:blueHCos];```
     
    
  • 3.1.2垂直方向

      [self.view addConstraints:blueVCos];```
    
    

Masonry 添加约束

define MAS_SHORTHAND

define this constant if you want to use Masonry without the 'mas_' prefix

  • 只要添加这个宏, 就可以去掉Masonry框架中对象访问对象属性前面的mas_属性, 和方法前的mas_前缀

  • 例如添加前的写法

make.left.equalTo(self.view.mas_left).with.offset(20);

  • 例如添加后的写法

make.left.equalTo(self.view.left).with.offset(20);

define MAS_SHORTHAND_GLOBALS

  • 只要添加上这个宏, 给equalTo传递参数的时候, 就可以直接传递基本数据类型 ,系统会自动包装
    • 如果没有添加上面这个宏, 那么给equalTo传递参数的时候, 必须传递对象
    • 如果要传递基本数据类型必须使用mas_equalTo
只需要在导入Masonry.h之前, 添加上一上两个宏, 就可以简化代码
注意: 在Storyboard中约束是可以重复添加的, 通过Masonry添加约束也是可以重复的, 要注意重复添加导致的错误和冲突
使用makeConstraints, 每次都会添加新的约束, 也就是会导致重复添加
要更新约束使用updateConstraints
  • updateConstraints特点: 如果没有设置过, 就添加一个新的

  • 如果已经设置过了, 就更新以前设置的那一个

     make.height.equalTo(100);
    
}];```
  • 清空约束 remakeConstraints

    [self.blueVeiw remakeConstraints:^(MASConstraintMaker *make)


Compact/Regular/Any

  • 图片中的设置: height = Any & compact

    • 代表宽度是任意的, 高度是紧凑的
      *==Any
    • ==Compact
    • ==Regular
      前面的是宽度, 后面的是高度
    • Any: 任意的
-  compact: 紧凑的
 - Regular:正常的

---ss

posted @ 2015-07-29 00:16  daizeng3344  阅读(172)  评论(0编辑  收藏  举报