AutoLayout (1) 简介
自从 iPhone 5 与 iOS 6 上市之后, iPhone 有了多种解析度与方向,以往一个简单的数字座标设定,眼下在不同解析度下面,就会有不同的结果。如果只想知道程式化手动建立 Constranints, 可以看这儿:手动建立Constransts
先看一下实做Demo:
举例来说,如果我们在XCode 没有支援 autolayout 的版本(或关掉)下,用 StoryBoard 设定了一个 Button 并放在画面中间的下面,大概会是这个样子:
我们去看这个 Button 的 Layout 属性的话,会看到这些:
这表示这个 Button 定位是在左上角起的座标,124, 397 的 位置下,设定了一个 width 73, height 44 的 Button。
这样的设定似乎没什么问题,但其实是不是很理想,因为这是固定位置,所以在不同的解析度或方向时,就要重新设定位置,横向的时候,和四吋的萤幕时,就要用程式重新计算,无法使用 IB 工具来设定画面。在原生的状况下,画面将会出现:
横向(Button 不见):
我在四吋萤幕下留下底部空白:
但同样的东西,在新版支援 AutoLayout 的情形下,结果与设定是完全不同的。同样的我们在新版的 XCode (4.5.1 版之后 支援 iOS 6 Auto Layout 的情形下,我们会发现 StoryBoard 编辑画面和以往的设定,有些不一样了,其中有一个选项,叫做 Use auto layout。这个选项预设是开启的,在开启的状况下如果我们拉入一个 Button 和以往的情形,有一些不同。
他不再只是让你设定座标了,而是多了两个 Constranints。
Constranints 是 autolayout 的表示法,系统会依据他的设定,自动产生座标。
以这个案例来说,
第一个 Constranints 是指它的底部依据它的上层 View 的底部,加上固定距离。
第二个 Constranints 是指它的中央对齐它上层 View 的中央。
其他的依据这两个来产生,于是就有自动座标,不管是 3.5 吋的画面
或四吋的 iPhone 5
更或者横过来
座标都以上面两个 Constranints 来产生,而不再是固定座标。当然,Constranints 中有许多技巧需要做更进一步的说明,如优先权等,下次再做更进一步的说明。
如果想知道程式化手动建立 Constranints, 可以看这儿:手动建立Constransts