您的位置:首页 > 产品设计 > UI/UE

Auto Layout Guide---自动布局指南(一)

2013-10-27 15:39 381 查看

 

原文链接:https://developer.apple.com/library/ios/documentation/……/AutoLayoutConcepts.html

 

自动布局概念 Auto Layout Concepts

 

在自动布局中基本构建块是约束([b]constraint)[/b]。约束表现在你的界面元素的布局规则,例如,您可以创建一个约束,指定该元素的宽度,或跟另一个元素的水平距离。你可以通过添加和删除约束,或改变约束的性质,来影响你的界面布局。。
当正在计算用户界面元素的运行位置时,自动布局系统同时考虑所有约束,以最能满足所有的约束来设置位置。


基本约束(Constraint Basics)

你可以把约束想象为一个:人可表达语句的数学表达方式。例如,如果你定义一个按钮的位置,你可能会说“左边缘应该是:距离它的包含视图的左边缘20points。”更正式地讲
,这可以转化为
 
button.left = (container.left + 20)
 
,它的另一种表达的形式
为 
y
= m*x + b
,其中:

y
x为
属性的属性。

m和b为浮点值。

其中的属性(attribute )是指: 
left
right
top
bottom
leading
trailing
width
height
centerX
centerY
, 和 
baseline.


leading 和trailing 属性和
left,
right在
英语中的意思是相同的,但在从右到左的特殊环境中,如希伯来文或阿拉伯文,leading和
trailing
都是一样的right和left。当您创建约束时,
leading 
trailing 
是默认值。通常你应该使用leading 和trailing ,以确保您的接口布局在所有的语言中正确使用,除非你正在做的约束无论什么语言都应该保持不变(如在拆分视图中主视图和详细信息视图的顺序)。


约束还可以有其他的属性设置:

恒定值(Constant value)如约束中的物理尺寸或偏移点数值。

关系([b]Relation)[/b]自动布局不仅仅支持视图中的恒定属性值;例如,您可以使用关系和不等式,如大于或等于去指定视图的width
>
= 20
,甚至可以说
textview.leading
>= (superview.leading + 20).


优先级([b]Priority level)[/b]约束还有优先级。先满足较高优先级的约束而后满足较低优先级的约束。默认的优先级(
NSLayoutPriorityRequired
)意味着,约束必须精确地满足。即使它不能完全实现,布局系统应该尽可能接近来满足可选的约束。

优先级允许你表达有用的条件行为。例如,它们被用来表达某些控件应该始终是,大小适配他们的内容,除非有优先级更高更重要的东西。对于优先级的更多信息,请参阅
NSLayoutPriority


约束是累加的,不互相覆盖。如果你有一个现有的约束,再设置另一个相同类型的约束,它不会覆盖前一个。例如,为视图设置第二宽度约束不删除或改变第一宽度约束。---事实上你需要手动删除第一个约束。

有一些约束可以跨越视图层次​​。例如,在OS X系统中的Mail app应用程序,默认情况下删除按钮在message table工具栏线的上方;桌面使用偏好中,复选框在窗口的底部与分割视图面板操作对齐。

You cannot set a constraint to cross the view hierarchy if the hierarchy includes a view that sets the frames of subviews manually in a custom implementation for the
layoutSubviews
 method
on 
UIView
 (or
the 
layout
 method on 
NSView
)。

它也没有能够跨越任何视图,如果视图有一个边界变换(如滚动视图 scroll view)。你可以认为这种视图是一种障碍(有一个内心世界和外部世界),通过约束里​​面不能够连接到外面的世界。


内在内容大小(Intrinsic Content Size)

叶级(如按钮)的视图通常都知道他们应该是什么尺寸比起那些定位它们的代码。通过Intrinsic Content Size告诉布局系统视图中包含的一些内容和其大小(它本身并不了解)。

对于一些像文本标签类的元素,您通常应设置元素其内在的大小(select Editor > Size To Fit Content)。这意味着,该元素将根据不同的内容,不同的语言来适当增长和收缩。


应用架构(Application Architecture)

自动布局负责在控制器和视图之间分配责任。而不是写一个无所不知的控制器,计算视图需要对于一个给定的几何,视图变得更加self-organizing。这种方法可以减少控制器逻辑的复杂性,可以更容易地重新设计视图布局代码,而不需要相应的变化。

您可能仍然需要在运行时动态添加,删除,或调整约束的对象。要了解更多关于管理约束代码,请阅读《Working
with Auto Layout Programmatically》


控制器的作用

虽然视图指定其内​​在的内容的大小,视图的用户指定其重要性。例如,默认情况下,一个按钮:

强烈地想要在垂直方向拥抱它的内容(按钮真的应该是他们的自然高度)

水平方向拥抱其内容(额外的侧面填充标题和边缘之间的挡板是可以接受的)

在两个方向强烈抵抗压缩或剪切的内容

UIView
 中使用
setContentHuggingPriority:forAxis:
setContentCompressionResistancePriority:forAxis:
(for[code]NSView
,
you use
setContentHuggingPriority:forOrientation:
and
setContentCompressionResistancePriority:forAxis:
)来设定伸缩优先级[/code]。默认情况下,所有的UIKit和AppKit的视图在
NSLayoutPriorityDefaultHigh
NSLayoutPriorityDefaultLow都
有一个值。

 

Copyright © 2013 Apple Inc. All Rights Reserved. Terms of Use | Privacy
Policy | Updated: 2013-09-18

 

TheLittleBoy翻译,转载请注明出处,谢谢!

 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息