自動布局 Autolayout

2021-09-22 09:22:41 字數 2378 閱讀 5440

簡介:

在以前的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高階

AutoLayout自動布局

autolayout 自動布局 入門 這是博主的wwdc2012筆記系列中的一篇,完整的筆記列表可以參看這裡。如果您是首次來到本站,也許您會有興趣通過rss,或者通過頁面左側的郵件訂閱的方式訂閱本站。autolayout是一種基於約束的,描述性的布局系統。auto layout is a const...

Autolayout自動布局3

不要將autoresizingmask轉為autolayout的約束 blueview.translatesautoresizingmaskintoconstraints no uiview redview uiview alloc init self.view addsubview redview...

iOS 自動布局Autolayout

自動布局 autolayout 簡介 在以前的ios程式中,是如何設定布局ui介面的?經常編寫大量的座標計算 為了保證在3.5 inch和4.0 inch螢幕上都能有完美的ui介面效果,有時還需要分別為2種螢幕編寫不同的座標計算 即傳說中的 螢幕適配 什麼是autolayout?autolayout...