Auto Layout Guide——基于苹果开发者文档

来源:互联网 发布:php ext目录 编辑:程序博客网 时间:2024/05/22 11:52

Auto Layout简介

Auto Layout 是一个可以让你通过创建元素之间关系的数学描述来布局app用户界面的系统。你可以通过单个或则一系列元素之间的约束来定义这种关系。使用Auto Layout,你可以创建一个动态的,灵活多变的用户界面来响应屏幕尺寸,设备方向以及元素位置的变化。

Auto Layout是在Xcode5的Interface Builder里自带,当你创建一个新工程时,Auto Layout默认开启。

在Xcode5上Auto Layout可以快速,简单的创建和维护一个基于约束布局的ios应用,你可以:
  1. 添加约束
  2. 使用controle拖拽或则菜单选项快速添加约束
  3. 单独更新constraints或则frames
  4. 为动态视图指定约束占位符
  5. 理解和解决有冲突的约束或则有歧义的视图布局

Auto Layout概念

Auto Layout基本构建块是constraint,constraint表明界面中元素布局的规则,比如:你能够创建一个constraint指定一个对象的宽度,或则相对另外一个对象的水平距离。你添加和移除constraint或则修改constraint的属性值来改变界面布局。
当计算界面中元素的运行时位置时,Auto Layout系统必须同时考虑所有的constraint,在这种情况下设置元素位置来最好的满足所有的constraint。

constraint基础

你可以把constraint当作一个可表达性语句的数学表达式,如果你定义一个按钮的位置,比如:你可能想要说“左边缘距离它容器视图左边缘20个点”,更正式点,按钮的左边缘 = 容器视图的左边缘 + 20 ;这就形似y = M*x + b的表达式:
  1. x和y代表视图的属性值
  2. M和b代表具体的浮点数
属性包含左,右,顶部,底部,leading,trailing,宽度,高度,CenterX,CenterY和BaseLine。
leading和trailing属性在从左到右的语言环境中(比如英语)跟left和right相同,在从右到左的语言环境中(比如希伯来语或则阿拉伯语)跟right和left相同。创建constraint时,leading和trailing是默认值,你通常应该使用leading和trailing在你的界面布局上来确保适应所有的语言,除非你生成的约束不考虑语言环境的影响保持一致。
constraint可以有其他属性设置:
  1. 常数值:constraint的物理尺寸或则偏移
  2. 关系:Auto Layout不仅仅支持视图属性常数值设定,你可以使用关系和不等式比如大于等于来指定:例如视图大宽度>=20甚至textview的leading>=superview.leading+20
  3. 优先级:constraint有优先级,高优先级的约束优于低优先级的约束,先满足。默认优先级是required(NSLayOutPriorityRequired):constraint必须明确满足。layout系统尽可能接近的满足一个可选constraint,尽管可能无法完全满足它。优先级能让你表达有用的行为。比如:他们通常被用来表示一些控件应该调整大小来适应其内容,除非一些更重要的事情要优先。关于优先级的更多信息,参见NSLayOutPriority。
constraint是累加的,不会重写。如果你有一个已经存在的约束,再去设置另外一个同类型的约束不会重写之前constraint的属性。例如:设置一个视图的第二宽度constraint并不会移除或则修改第一宽度constraint,你需要手动移除第一个宽度constraint。
constraint能有限制的跨越视图层次。如果视图层次中包含一个手动设置子视图frames的自定义实现LayoutSubviews方法的视图,你不能跨越视图层次设置constraint。也不能跨越有任何边界变换的视图(scrollview)。你可以把这些视图当成一个栅栏,他们有内部世界和外部世界,但constraint不能连接内部世界和外部世界。

固有内容尺寸

叶级试图如按钮通常比确定它们位置的代码比确定它们位置的代码)了解更多关于它们的尺寸应该是多少。这个是通过固有内容尺寸决定的,告知layout系统视图包含一些它所无法理解的内容,指定这些内容固有的大小。

对于一些元素如label,你通常应该设置为内在多尺寸(选择Editor中Size To Fit Content)这意味着元素将会根据不同语言不同内容适当增长或收缩。

应用结构

Auto Layout结构将布局的责任分散到所有的viewControllers和views上,而不是写一个无所不能的controller根据指定的几何算法计算视图需要如何布局,视图能更自我管理,这进一步降低了controller逻辑的复杂度,使得它能更容易的重新设计视图而不需要改变布局代码

controller的定位

尽管视图指定它固有内容的尺寸,但是使用视图的用户决定这个视图的重要程度,比如:
  1. 强烈希望它的内容在水平方向紧凑布局(按钮实际应该是自然高度)
  2. 其次希望它的内容在垂直方向紧凑布局(额外侧填充标题和边框的边缘之间是可以接受的)
  3. 强烈抵制双向压缩或则剪切内容

0 0
原创粉丝点击