ios 自动布局

来源:互联网 发布:linux ftp命令怎么用 编辑:程序博客网 时间:2024/05/18 00:57

明白自动布局

自动布局动态计算视图层级里的所有视图的大小和位置,基于设置在那些视图上的限制。例如,你可以限制一个按钮以便它处于一个图片视图的中心,并且按钮的顶部总是与图片底部保持8点。如果这个图片视图的大小或者位置改变了,按钮的位置会自动调节匹配。


这个基于限制的方法设计容许你建立用户界面动态的响应内部和外部的改变。


外部的改变

外部改变是指当父视图的大小和形状的改变。对于每一个改变,你必须更新你的视图层级的布局来最好的使用可利用的空间。这里有一些普遍的引起外部改变的原因:

1.用户调整窗口大小(OS X)。

2.用户进入或者离开Split View在ipad上(IOS)。

3.设备旋转(IOS)

4.活动调用和音频录制条出现或者消失(IOS).

5.你想支持不同的大小类。

6.你想支持不同的屏幕大小。

大多数这些改变会发生在运行时,而且他们需要从你的app得到一个动态的回复。其他的,像支持不同屏幕大小,代表app适应不同的环境。即使屏幕大小不能在运行时改变,创建一个可适配的界面可以使你的app在iphone 4s,iphone 6plus 甚至是在ipad上都运行的很好。自动布局也是一个关键的成分来支持ipad上的slide over和split views。


内部改变

内部改变是指你的UI里视图或者控件的大小发生改变。

以下是普遍导致内部改变的原因:

1.app展现的内容发生改变

2.app支持国际化

3.app支持动态类型(Dynamic Type)(IOS)

当app内容发生改变时,新的内容可能会需要一个不同的布局。这个通常发生在app里文本或者图片的展示。例如,一个新闻app需要基于不同的新闻文章调整它的布局。相似的,一个照片拼图画必须处理一个宽范围的图片大小和高宽比。


国际化是一个用来使你的app能够适应不同的语言,区域和文化的处理方法。一个国际化app的布局必须考虑到这些不同并且在app所支持的所有语言和地区都要正确展示。国际化对布局主要有3个影响。1.当你翻译你的UI到不同的语言时,label需要不同的空间大小。2.时间的格式和数字地域之间不同,即使语言不改变。即使这些改变相对于语言的改变很微小,UI仍然需要在大小上做细微调整。3.改变语言不仅会影响文本的大小,还会影响布局的组织。不同语言使用不同的布局方向。例如,英语,使用从左到右的布局方向,其他有些地方使用从右到左的布局方向。一般的,UI元素的顺序应该匹配布局方向。


最后,如果你的app支持动态类型,用户可以改变app中字体的大小。这个会同时改变UI中文本元素的高度和宽度。如果当app运行时,用户改变了字体的大小,字体和布局都必须同时适配。


自动布局相对于基于框架的布局

有3种方式布局UI。你可以编程布局,你可以使用自动调整大小masks(autoresizing masks)去自动化一些外部改变的响应,或者你可以使用自动布局。


传统上,app布局UI通过编程设置视图层级里的每一个视图的frame。frame定义视图在父视图坐标系的原点,高度和宽度。


布局你的UI,你必须计算你的视图层级中的每一个视图的大小和位置。然后,如果一个改变发生了,你必须重新计算所有受影响的视图。


在一些方法中,编程定义一个视图的frame提供最大的灵活性和能力。当一个改变发生时,你可以做任何你想要的改变。然而由于你需要自己管理所有的改变,布局一个简单的UI需要花费很多的精力考虑设局,调试,以及保持。创建一个真正的可适配的UI增加了一个数量级的难度。


你可以使用autoresizing masks来帮助减轻一些工作。一个autoresizing mask定义当她的父视图的frame改变时某一个视图的frame如何改变。这简化了适应外部改变的布局创建。


然而,autoresizing masks支持一个可能布局中的相对小的子集。对于复杂的UI,你需要用你自己的编程改变来增加autoresizing masks。另外,autoresizing masks仅仅适应外部改变。他们不支持内部改变。


autoresizing masks仅仅是在编程布局上的一个可迭代的提升,然而自动布局代表一个完整的新方法。你不用考虑一个视图的frame,而是考虑它们的关系。


自动布局使用一系列的限制定义你的UI。限制代表两个视图之间的关系。自动布局会基于这些限制,自动计算每个视图的大小和位置。这可以使布局动态的响应内部和外部的改变。


用来设计创建特定行为的限制集合的逻辑与用来写面向过程或面相对象代码的逻辑是不同的。幸运的是,处理自动布局与处理任何一个程序任务是一样的。有两个基本的步骤:1.你需要知道基于限制布局的背后逻辑。2学习api。

0 0
原创粉丝点击