您的位置:首页 > 移动开发 > IOS开发

AutoLayout的基本使用

2015-11-22 14:49 253 查看


1.AutoLayout的基本使用

通过代码计算 frame

Autoresizing(设置控件与父控件的相对关系,从而实现间接设置frame, iOS系统在运行时会根据设置的规则, 计算出对应的frame,无需手动计算frame)

通过设置子控件与父控件的关系来决定如何显示控件

Auto Layout

通过设置某控件与任意其他控件间的关系来决定如何显示这个控件, 不仅仅局限与父子控件

Size Classes

通过 Size Classes + Auto Layout实现针对不同屏幕为控件设置不同的约束

2.AtutoLaout的常见错误

[b]警告[b]控件的frame不匹配所添加的约束,
比如比如约束控件的宽度为100,
而控件现在的宽度是110

错误缺乏必要的约束,
比如只约束了宽度和高度,
没有约束具体的位置两个约束冲突,
比如[/b][/b]

1[b]个约束控件的宽度为[b]100, 1个约束控件的宽度为110[/b][/b]



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.注意事项

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

9.约束

1.添加约束的规则

[b]在创建约束之后,需要将其添加到作用的[b]view在添加时要注意目标view需要遵循以下规则:[/b][/b]

1对于两个同层级view之间的约束关系,添加到它们最近的父view



2添加约束的规则2

[b]2[b])对于两个不同层级view之间的约束关系,添加到他们最近的共同父view上[/b][/b]

3.约束总结

[b]总结[b]:
如果添加的约束和其它控件没有关系,
会添加到自己身上总结:如果是父子关系,
设置子控件的约束,
约束会添加到父控件上注意:
两个控件是兄弟关系[/b][/b]

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

9.代码实现AtutoLaout

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

- (
void)addConstraints:(NSArray
*)constraints;

代码实现Auto Layout的注意点

1
》 要先禁止Autoresizing功能,设置view的下面属性为NOview.translatesAutoresizingMaskIntoConstraints
= NO;
2》 添加约束之前,一定要保证相关控件都已经在各自的父控件上[/b][/b]

3[b]》不用再给[b]view设置frame[/b][/b]

2.
[b]一个[b]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 :常量自动布局有个核心公式[/b][/b]

[b]obj1.property1 =[b](obj2.property2 * multiplier+
constant value[/b][/b]

3.VFL语言

什么是VFL语言

VFL全称是Visual Format Language,翻译过来是“可视化格式语言”

VFL是苹果公司为了简化Autolayout的编码而推出的抽象语言

4.VFL语言代码实现

[b]H:[cancelButton(72)]-12-[acceptButton(50)]
[b]canelButton
72acceptButton50,它们之间间距12


H:[wideView(>=60@700)]
wideView宽度大于等于60point,该约束条件优先级为700(优先级最大值为1000,优先级越高的约束越先被满足)
V:[redBox][yellowBox(==redBox)]
竖直方向上,先有一个redBox,其下方紧接一个高度等于redBox高度的yellowBox

H:|-10-[Find]-[FindNext]-[FindField(>=20)]-|[/b][/b]

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

5.VFL的使用

[b]使用[b]VFL来创建约束数组+ (NSArray
*)constraintsWithVisualFormat:(NSString
*)format options:(NSLayoutFormatOptions)opts metrics:(NSDictionary
*)metrics views:(NSDictionary
*)views;

format
VFL语句opts :约束类型
metrics VFL语句中用到的具体数值
views VFL语句中用到的控件创建一个字典(内部包含VFL语句中用到的控件)的快捷宏定义[/b][/b]

[b]NSDictionaryOfVariableBindings(...)[/b]

6.基于Autolayout的动画

[b]在修改了约束之后,只要执行下面代码,就能做动画效果[b][UIView
animateWithDuration:1.0
animations:^{

    [
添加了约束的view
layoutIfNeeded];

}];

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

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

7.Size Classes 介绍

[b]从
[b]iOS8
开始才支持
Size Classes
Size Classes本质就是对所有的屏幕进行了分类,
我们可以为不同类型的屏幕设置不同的约束

仅仅是对屏幕进行了分类
,
真正排布UI元素还得使用Auto Layout
不再有具体尺寸的概念,
只有抽象尺寸的概念

把宽度和高度各分为
3种情况
1> any(任意,
表示既可以是 compact,
也可以是 regular),  
一般用 *
表示

2> compact(
紧凑,
),      
一般用 -
表示[/b][/b]

3> regular([b]正常[b],
),          一般用
+ 表示[/b][/b]

8

[b]Size Class:[b]仅仅是对屏幕进行了分类[/b][/b]



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

9.重要!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

9.AutoLayout按钮各种布局

10.AutoLaout的约束

11.AutoLaout的约束调试

12.AutoLaout的使用细节

13.AutoLayout属性面板细节

14.连按指向编辑



15.Xcode 版本信息

Xcode4.2: 2011[b]年1013
--开始支持(iOS5-iPhone4s)

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

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

[/b]

Xcode6.0:2014[b]年917-开始支持(iOS8-iPhone6) [/b]

16.第三方框架 Massonry的基本使用 self.view不要top.right.bttom
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  iOS 初级iOS 布局 控件