iOS 自動布局Autolayout

2021-09-08 11:25:55 字數 2378 閱讀 4665

自動布局:autolayout

簡介:在以前的ios程式中,是如何設定布局ui介面的?

經常編寫大量的座標計算**

為了保證在3.5 inch和4.0 inch螢幕上都能有完美的ui介面效果,有時還需要分別為2種螢幕編寫不同的座標計算**(即傳說中的「螢幕適配」)

什麼是autolayout?

autolayout是一種「自動布局」技術,專門用來布局ui介面的

autolayout自ios 6開始引入,由於xcode 4的不給力,當時並沒有得到很大推廣

自ios 7(xcode 5)開始,autolayout的開發效率得到很大的提公升

蘋果官方也推薦開發者盡量使用autolayout來布局ui介面

autolayout能很輕鬆地解決螢幕適配的問題

autoresizing

在autolayout之前,有autoresizing可以作螢幕適配,但侷限性較大,有些任務根本無法完成,只能決定子檢視和父檢視的螢幕適配。

相比之下,autolayout的功能比autoresizing強大很多

autolayout的2個核心概念:

參照、約束

autolayout的警告和錯誤:

警告控制項的frame不匹配所新增的約束, 比如

比如約束控制項的寬度為100, 而控制項現在的寬度是110

錯誤缺乏必要的約束, 比如

只約束了寬度和高度, 沒有約束具體的位置

兩個約束衝突, 比如

1個約束控制項的寬度為100, 1個約束控制項的寬度為110

**實現autolayout:

**實現autolayout的步驟

利用nslayoutconstraint類建立具體的約束物件

新增約束物件到相應的view上

- (void)addconstraint:(nslayoutconstraint *)constraint;

- (void)addconstraints:(nsarray *)constraints;

**實現autolayout的注意點

要先禁止autoresizing功能,設定view的下面屬性為no

view.translatesautoresizingmaskintoconstraints = no;

新增約束之前,一定要保證相關控制項都已經在各自的父控制項上

不用再給view設定frame

nslayoutconstraint:約束類

乙個nslayoutconstraint物件就代表乙個約束

建立約束物件的常用方法

+(id)constraintwithitem:(id)view1 attribute:(nslayoutattribute)attr1 relatedby:(nslayoutrelation)relation toitem:(id)view2 attribute:(nslayoutattribute)attr2 multiplier:(cgfloat)multiplier constant:(cgfloat)c;

view1 :要約束的控制項

attr1 :約束的型別(做怎樣的約束)

relation :與參照控制項之間的關係

view2 :參照的控制項

attr2 :約束的型別(做怎樣的約束)

multiplier :乘數

c :常量

自動布局有個核心公式

obj1.property1 =(obj2.property2 * multiplier)+ constant value

obj1、obj2:要約束的檢視控制項

property1、property2:約束的型別

multiplier:乘數,一般為1.0

constant value:常量

約束規則:

新增約束的規則(1)

在建立約束之後,需要將其新增到作用的view上

在新增時要注意目標view需要遵循以下規則:

1)對於兩個同層級

view之間的約束關係,新增到它們的父view上

新增約束的規則(2)

2)對於兩個不同層級view之間的約束關係,新增到他們最近的共同父view上

新增約束的規則(3)

3)對於有層次關係的兩個view之間的約束關係,新增到層次較高的父view上

IOS自動布局

使用相對布局之後,可以增加開發的速度,一直用frame的方式,混亂。使用相對布局之後,之前以設定frame的方式來取設定view將沒有效果 除了controller的view 同設定frame類似的時,在設定view的約束的時候,也需要制定他的大小和座標,否則,編輯器會提示警告。以實際操作來演示下如...

ios 自動布局小結

ios6 引入了自動布局。雖然專案中所用不多。但是還是 早點資料看看 做個總結。隨著蘋果解析度越來越多。類似自動布局肯定是越發重要了。在ios 之前 有 autosizing 就是 在父view 跟子view 引入了 spring 和 strut 的概念。乙個是彈簧?意思應該是保證距離不會大於某乙個...

IOS 自動布局 (上)

最早接觸xcode是4.0 那時候auto layout真不成熟,一直用純 自己寫,從最cgrectgetmaxy,cgrectgetmaxx到現在的第三方,最近時間比較多了,參考了網上列子,研究下了 auto layout 和size classes.auto layout 我覺得使用 auto ...