AutoLayout的基本使用


1.AutoLayout的基本使用
通过代码计算 frame
Autoresizing(设置控件与父控件的相对关系,从而实现间接设置frame, iOS系统在运行时会根据设置的规则, 计算出对应的frame,无需手动计算frame)
通过设置子控件与父控件的关系来决定如何显示控件
Auto Layout
通过设置某控件与任意其他控件间的关系来决定如何显示这个控件, 不仅仅局限与父子控件
Size Classes
通过 Size Classes + Auto Layout实现针对不同屏幕为控件设置不同的约束

2.AtutoLaout的常见错误
警告
控件的frame不匹配所添加的约束, 比如
比如约束控件的宽度为100, 而控件现在的宽度是110


错误
缺乏必要的约束, 比如
只约束了宽度和高度, 没有约束具体的位置

两个约束冲突, 比如
1个约束控件的宽度为100, 1个约束控件的宽度为110

3.简单实现一
需求:设置一个宽150,高30的按钮始终显示在屏幕的正中央(水平居中对齐、垂直居中对齐)
思路:设置水平居中约束、垂直居中约束、高和宽的约束

4.简单实现 二
设置一个 UIView 无论在任何屏幕下距离上下左右四个边的距离都是50。思路:设置距离四周的 margin 为50.设置一个 UIView 无论在任何屏幕下距离上下左右四个边的距离都是50。思路:设置距离四周的 margin 为50.
5.简单实现 三
距离左右间距20, 两个 View 之间间隔始终是20, 两个 View 的高度都是50。宽度不定(两个宽相等)。(演示使用多种方式都可以实现)
注意:设置右边相对于某个控件的margin (间距)的时候, 如果当前控件的右边没有那个控件,则无法选择。



6.简单实现 四

在控制器view顶部添加2个view,1个蓝色,1个红色
2个view高度永远相等, 50
红色view和蓝色view右边对齐
蓝色view距离父控件左边、右边、上边间距相等,30
蓝色view距离红色view间距固定,30
红色view的左边和父控件的中点对齐(或者红色 View的宽度是蓝色 View 的一半)

7.史上最难游戏的button的按钮适配
完成“史上最牛的游戏”首页
添加对应的6个button和背景图片,适配3.5 inch、4.0 inch

8.注意事项
注意:按钮、开关、文本框等控件不设置高、宽的约束也可以,因为这些控件的高、宽都有默认值。

9.约束
1.添加约束的规则
在创建约束之后,需要将其添加到作用的view
在添加时要注意目标view需要遵循以下规则:
1对于两个同层级view之间的约束关系,添加到它们最近的父view

2添加约束的规则2
2对于两个不同层级view之间的约束关系,添加到他们最近的共同父view

3.约束总结
总结: 如果添加的约束和其它控件没有关系, 会添加到自己身上

总结:如果是父子关系, 设置子控件的约束, 约束会添加到父控件上

注意: 两个控件是兄弟关系
总结: 如果是兄弟关系, 设置两兄弟的约束, 约束会添加到它们最近的共同父控件上


9.代码实现AtutoLaout
代码实现Auto Layout的步骤
1.利用NSLayoutConstraint类创建具体的约束对象
添加约束对象到相应的view
- (void)addConstraint:(NSLayoutConstraint *)constraint;
- (
void)addConstraints:(NSArray *)constraints;

代码实现Auto Layout的注意点
1
》 要先禁止Autoresizing功能,设置view的下面属性为NO
view.translatesAutoresizingMaskIntoConstraints = NO;
2》 添加约束之前,一定要保证相关控件都已经在各自的父控件上
3》不用再给view设置frame

2. 一个NSLayoutConstraint对象就代表一个约束

创建约束对象的常用方法
+(id)constraintWithItem:(id)view1 attribute:(NSLayoutAttribute)attr1 relatedBy:(NSLayoutRelation)relation toItem:(id)view2 attribute:(NSLayoutAttribute)attr2 multiplier:(CGFloat)multiplier constant:(CGFloat)c;
view1 :要约束的控件
attr1 :约束的类型(做怎样的约束)
relation :与参照控件之间的关系
view2 :参照的控件
attr2 :约束的类型(做怎样的约束)
multiplier :乘数
c :常量

自动布局有个核心公式
obj1.property1 =obj2.property2 * multiplier+ constant value

3.VFL语言
什么是VFL语言
VFL
全称是Visual Format Language,翻译过来是可视化格式语言
VFL是苹果公司为了简化Autolayout的编码而推出的抽象语言


4.VFL语言代码实现
H:[cancelButton(72)]-12-[acceptButton(50)]
canelButton72acceptButton50,它们之间间距12

H:[wideView(>=60@700)]
wideView宽度大于等于60point,该约束条件优先级为700(优先级最大值为1000,优先级越高的约束越先被满足)

V:[redBox][yellowBox(==redBox)]
竖直方向上,先有一个redBox,其下方紧接一个高度等于redBox高度的yellowBox

H:|-10-[Find]-[FindNext]-[FindField(>=20)]-|
水平方向上,Find距离父view左边缘默认间隔宽度,之后是FindNext距离Find间隔默认宽度;再之后是宽度不小于20FindField,它和FindNext以及父view右边缘的间距都是默认宽度。(竖线“|” 表示superview的边缘)

5.VFL的使用
使用VFL来创建约束数组
+ (NSArray *)constraintsWithVisualFormat:(NSString *)format options:(NSLayoutFormatOptions)opts metrics:(NSDictionary *)metrics views:(NSDictionary *)views;
format
VFL语句
opts :约束类型
metrics VFL语句中用到的具体数值
views VFL语句中用到的控件

创建一个字典(内部包含VFL语句中用到的控件)的快捷宏定义
NSDictionaryOfVariableBindings(...)

6.基于Autolayout的动画
在修改了约束之后,只要执行下面代码,就能做动画效果
[UIView animateWithDuration:1.0 animations:^{
    [
添加了约束的view layoutIfNeeded];
}];

思路:通过添加约束后,在修改约束的值,来实现动画。

注意:调用 某个 view layoutIfNeeded方法, 会先更新这个 view 的约束, 这个 view 的子控件的约束。

7.Size Classes 介绍
iOS8开始才支持 Size Classes
Size Classes本质就是对所有的屏幕进行了分类, 我们可以为不同类型的屏幕设置不同的约束
仅仅是对屏幕进行了分类
, 真正排布UI元素还得使用Auto Layout
不再有具体尺寸的概念, 只有抽象尺寸的概念
把宽度和高度各分为
3种情况
1> any(任意, 表示既可以是 compact, 也可以是 regular),   一般用 * 表示
2> compact(
紧凑, ),       一般用 - 表示
3> regular(正常, ),          一般用 + 表示

8
Size Class:仅仅是对屏幕进行了分类

Auto Layout:对屏幕中各种元素进行约束(位置\尺寸)

9.重要!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
9.AutoLayout按钮各种布局


10.AutoLaout的约束

11.AutoLaout的约束调试
12.AutoLaout的使用细节


13.AutoLayout属性面板细节

14.连按指向编辑

15.Xcode 版本信息
Xcode4.2: 20111013 --开始支持(iOS5-iPhone4s)

Xcode4.5:2012
920-开始支持(iOS6-iPhone5)

 Xcode5.0: 2013
918 -- 开始支持(iOS7-iPhone5s)

Xcode6.0:2014917-开始支持(iOS8-iPhone6) 

16.第三方框架 Massonry的基本使用 self.view不要top.right.bttom

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值