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

 

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

 

自动布局概念 Auto Layout Concepts

 

在自动布局中基本构建块是约束(constraint约束表现在你的界面元素的布局规则,例如,您可以创建一个约束,指定该元素的宽度,或跟另一个元素的水平距离。你可以通过添加和删除约束,或改变约束的性质,来影响你的界面布局。

当正在计算用户界面元素的运行位置时,自动布局系统同时考虑所有约束,以最能满足所有的约束来设置位置。

基本约束(Constraint Basics)

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

  • yx为属性的属性。

  • m和b为浮点值。

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

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

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

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

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

  • 优先级(Priority level约束还有优先级。先满足较高优先级的约束而后满足较低优先级的约束。默认的优先级(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 thelayoutSubviews 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:(forNSView, you usesetContentHuggingPriority:forOrientation:andsetContentCompressionResistancePriority:forAxis:)来设定伸缩优先级默认情况下,所有的UIKit和AppKit的视图在NSLayoutPriorityDefaultHighNSLayoutPriorityDefaultLow都有一个值

 

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

 

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

 

你可能感兴趣的:(Objective-C,layout,auto,guide)