iOS Autolayout自動布局

2022-03-13 00:13:35 字數 2350 閱讀 1855

•在ios程式中,大部分檢視控制器都包含了大量的**用於設定ui布局,設定控制項的水平或垂直位置,以確保元件在不同版本的ios中都能得到合理的布局

•甚至有些程式設計師希望在不同的裝置使用相同的檢視控制器,這就給**新增了更多的複雜性!

•自動布局autolayout的引入很好地解決了這一問題!

•autolayout是一種基於約束的,描述性的布局系統

–基於約束:和以往定義frame的位置和尺寸不同,autolayout的位置確定是以所謂相對位置的約束來定義的,比如x座標為superview的中心,y座標為螢幕底部上方10畫素等

–描述性:約束的定義和各個view的關係使用接近自然語言或者視覺化語言的方法來進行描述

–布局系統:用來負責介面的各個元素的位置

•autolayout為開發者提供了一種不同於傳統對於ui元素位置指定的布局方法。以前,不論是在ib裡拖放,還是在**中寫,每個uiview都會有自己的frame屬性,來定義其在當前檢視中的位置和尺寸。而使用autolayout,就變為了使用約束條件來定義view的位置和尺寸

•解決不同解析度和螢幕尺寸下view的適配問題,同時也簡化了旋轉時view的位置的定義。原來在底部之上10畫素居中的view,不論在旋轉螢幕或是更換裝置(ipad、ipad mini、iphone 4或者是iphone5/iphone6/iphone6plus)的時候,始終還在底部之上10畫素居中的位置,不會發生變化

•使用約束條件來描述布局,view的frame會依據這些約束來進行計算

•autolayout可以指定任意兩個view的相對位置,而不需要像autoresizing mask那樣需要兩個view在直系的view hierarchy中

•autolayout不必須指定相等關係的約束,它可以指定非相等約束(大於或者小於等);而autoresizing mask所能做的布局只能是相等條件的

•autolayout可以指定約束的優先順序,計算frame時將優先按照滿足優先順序高的條件進行計算

•在建立約束之後,需要將其新增到作用的view上。在新增時要注意目標view需要遵循以下規則

•1)  對於兩個同層級view之間的約束關係,新增到他們的父view上

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

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

-(void)addconstraint:(nslayoutconstraint *)constraint

•重新整理約束的改變

-setneedsupdateconstraints

-layoutifneeded

[button settranslatesautoresizingmaskintoconstraints:no];

// 2.1 水平方向的約束

nslayoutconstraint *constraintx = [nslayoutconstraint constraintwithitem:button attribute:nslayoutattributecenterx relatedby:nslayoutrelationequal toitem:self.view attribute:nslayoutattributecenterx multiplier:1.0f constant:0.0f];

[self.view addconstraint:constraintx];

// 2.2 垂直方向的約束

nslayoutconstraint *constrainty = [nslayoutconstraint constraintwithitem:button attribute:nslayoutattributecentery relatedby:nslayoutrelationequal toitem:self.view attribute:nslayoutattributecentery multiplier:1.0f constant:0.0f];

[self.view addconstraint:constrainty];

•ambiguous layout 布局不能確定,即給出的約束條件無法唯一確定一種布局,也就是約束條件不足,無法得到唯一的布局結果。這種情況一般新增一些必要的約束或者調整優先順序可以解決

•unsatisfiable constraints 無法滿足約束,問題**是有約束條件互相衝突,因此無法同時滿足,需要刪掉一些約束

•現在使用ib可以比較容易地完成複雜約束,在實際開發中很少再會遇到遺漏或者多餘約束情況的出現,有問題的約束條件將直接在ib中得到錯誤或者警告。

清澈saup

出處:

iOS Auto Layout介面自動布局(1)

ios系統中的自動布局 auto layout 一 檢視定位的基本原理 在平面直角座標系中,要準確描述乙個矩形需要確定以下四個布局屬性 layout attribute 即水平位置x 垂直位置y 寬度w 高度h。只有上述4個布局屬性都確定的情況下,該檢視才能正確顯示在介面中。以上圖為例,如果要將數字...

ios AutoLayout基礎知識 彙總

三大部分 二 storyboard 三 code to autolayout 一 autolayout簡介 autolayout 是乙個描述各種約束的行為,比如,乙個view 距離父view上邊距多少,相鄰之間的間隔,各個view之間的寬高關係等等 二 storyboard 第一部分 1.什麼是約束...

學習 iOS Autolayout的一點經驗

以下是最近在學習autolayout的過程中學到的一些東西,全出於自己的理解,不對的地方望大家指出。對於普通的檢視uiview來說,想要正確完成檢視的布局,就得建立足夠的約束,普通檢視無法計算自身的寬高,所以在建立約束時,要麼新增關於檢視寬高的約束,要麼新增足夠的其他約束,保證這些檢視可以計算出自身...