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宽72,acceptButton宽50,它们之间间距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间隔默认宽度;再之后是宽度不小于20的FindField,它和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]年10月13日
--开始支持(iOS5-iPhone4s)
Xcode4.5:2012年9月20日-开始支持(iOS6-iPhone5)
Xcode5.0: 2013年9月18日
-- 开始支持(iOS7-iPhone5s)
[/b]
Xcode6.0:2014[b]年9月17日-开始支持(iOS8-iPhone6) [/b]
16.第三方框架 Massonry的基本使用 self.view不要top.right.bttom
相关文章推荐
- 峰回路转,Firefox 浏览器即将重返 iOS 平台
- 峰回路转,Firefox 浏览器即将重返 iOS 平台
- Android布局的小窍门?
- Web布局连载——两栏固定布局(五)
- 不可修补的 iOS 漏洞可能导致 iPhone 4s 到 iPhone X 永久越狱
- iOS 12.4 系统遭黑客破解,漏洞危及数百万用户
- 每日安全资讯:NSO,一家专业入侵 iPhone 的神秘公司
- [转][源代码]Comex公布JailbreakMe 3.0源代码
- flex 控件的重要属性
- Delphi控件ListView的属性及使用方法详解
- 样式表CSS布局经验
- web下载的ActiveX控件自动更新
- WinForm实现按名称递归查找控件的方法
- css网页布局中注意的几个问题小结
- DL.DT.DD实现左右的布局简单例子第1/2页
- 使用CSS框架布局的缺点和优点小结
- div+CSS网页布局的意义与副作用原因小结第1/2页
- C#中父窗口和子窗口之间控件互操作实例
- Android编程之Button控件用法实例分析