`
fanfanlovey
  • 浏览: 71650 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

Auto Layout Gide:主要概念

 
阅读更多
自动布局概念

自动布局中基本的构建单位是约束,约束表达了控件在页面中的布局规则。例如,你可以创建一个约束来定义控件的宽带,或者他距离另一个控件的水平距离。你可以添加、删除约束,或者修改约束的值来修改页面布局。
当在一个页面中计算一个控件运行状态的位置时,自动布局系统在同一时间考虑所有的约束,并且设置控件最好的位置以满足所有的约束。

约束基础知识
你可以把约束定义为一种类似“人类表述”的数字表达的声明。如果你定义一个按钮的位置。比如,你可能会说,按钮左边的边距应该距离他父视图左边距20pt。更正式的,他会翻译成
button.left = (container.left+20),它可以转换成另一种表达形式 y=mx+b,其中
y 和x是视图的属性
m和b是数字
视图的属性可以是 left, right, top, bottom, leading, trailing, width, height, centerX, centerY或者baseLine
左边距和右边距属性类似那些从左到右的语言比如英语,或者那些从右到左的语言类似
当你创建约束时,左边距和右边距是默认的。除非你用约束来布局使得任何语言都适配(例如订单的掌握和一系列分类的详细视图),否则你应该通过左边距和右边距来约束你的布局,使得布局在任何语言下都能正常匹配
约束也有其他属性集
1、常数值  约束的大小或者抵销
2、关系  自动布局支持的不仅仅是视图属性的常量值。你可以使用类似高于或者等于这些不固定值来定义视图的关系。比如 一个视图 widht>=20,或者甚至textview.leading>=(superview.leading+20)
3、优先级约束有一个优先级属性,拥有高优先级的约束优先适配页面。NSLayoutPriorityRequired 是默认的优先级,这意味着这级别的约束必须适配页面。即使不可能完成适配,布局系统必须得到一个尽可能满足适配他的约束。
属性优先级允许你表述更有用的应用行为。例如,人们除非有更重要的约束需要占用,一般都会尽可能的通过约束来适配内容。 如果想要了解更多关于属性优先级,可以查看NSLayoutPriority

内在内容的大小
对应像按钮之类的叶子控件,它需要了解的是他在父视图中的大小而不是怎么在父视图中用代码固定大小。这是通过内在的大小来确定的,它(内在内容大小)告诉视图的约束他包含的内容是不固定的,而不是显示的告诉他内容多少。
如比,一个文本框,你可以通过xcode中的Editor > Size To Fit Content) 来适配他的内容大小。这可以让你的文本框在不同内容下面能合适的增长、收缩.

应用框架
我们是通过自动布局系统对控制器和视图进的自定布局进行分配,而不是所谓不能的控制器来进行处理。这种方式减少了控制器的复杂程度,让人不需要修改代码就可以方便的进行视图的重新设计。

你或许希望通过控制器在运行时候添加、删除、调整约束。想要了解更多通过代码管理约束,可以阅读“以编程方式使用自动约束”

控制器的角色
尽管一个视图指定起内在内容大小对使用视图的用户是多么重要。例如,在默认情况下,按钮,强烈的希望尽可能在垂直方向上展示他的内容(按钮真的应该是自然高度),在水平方向不一定全部展示他的内容(额外的标题和边框的边缘之间的填充是可以接受的)。
在两个方向强烈抵制压缩或剪切的内容

在一个用户界面中包含2个相邻的按钮。例如,他应该由控制器觉得哪个按钮应该占用额外的空间,只有一个按钮优先占用?2个按钮都彼此都占用?或者2个按钮均分多余空间?如果页面没有多余的空间来放置2个按钮,第一个按钮剪切空间?两个按钮都剪切空间?等等

你可以设置视图的hugging和compression属性,通过setContentHuggingPriority:forAxis:和setContentCompressionResistancePriority:forAxis: 来设置。默认情况下,所有UIKit和AppKit-supplied视图都有NSLayoutPriorityDefaultHigh或者NSLayoutPriorityDefaultLow.
之一。
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics