ios系統中的自動布局(auto layout)
一、檢視定位的基本原理
在平面直角座標系中,要準確描述乙個矩形需要確定以下四個布局屬性(layout attribute),即水平位置x、垂直位置y、寬度w、高度h。只有上述4個布局屬性都確定的情況下,該檢視才能正確顯示在介面中。
以上圖為例,如果要將數字鍵5新增到介面中,則**類似為:
uiview* number5view = [[uiview alloc] initwithframe:cgrectmake(x, y, w, h)];
[parentview addsubview:number5view];
上述**詳細給出了該檢視的4個布局屬性的值(x、y、w、h),我們姑且稱這種方式為「顯式座標定位方式」。
二、舊的介面布局方式及其缺點
請思考以下問題:
首先,當檢視數量很多時,由於每個檢視都需要精確給出4個布局屬性的值,因此構建每乙個檢視非常繁瑣而又容易出錯。而且,當發生介面尺寸變化(例如橫豎屏切換)時,你需要重新計算每個檢視的新的布局屬性值,工程量巨大。這顯然不是乙個令人滿意的解決方法。
於是蘋果給出了乙個更好的解決方法,就是在建立檢視的同時給出其相對于父檢視的「對齊方式與縮放係數」,即autoresizingmask。當父檢視發生變化時,通過每個子檢視的autoresizingmask即可自動得出新的位置,而無需開發者提供。例如上圖中的等號鍵,即可以指定其對齊方式為右對齊、下對齊,指定其縮放係數為固定寬度、固定高度。這樣就保證了等號鍵總位於其父檢視的右下角且寬高不變。
蘋果解決問題的出發點是好的,通過給出介面變化的規則來自動計算出布局屬性的值,從而省去開發者的工作。
然而autoresizingmask的問題在於:
因此在過去,很多時候開發者還不得不硬著頭皮使用顯式座標定位方式來解決轉屏(例如重寫layoutsubviews方法),或者分別做橫屏與豎屏兩套介面。
蘋果當然也意識到了這些問題,因此在ios 6發布時引入了自動布局(auto layout)與布局約束(layout constraint)的概念,意圖從根本上解決問題,接下來我們就來說說自動布局的原理和使用方法。
三、自動布局的原理與使用方法
自動布局是對autoresizingmask的進一步改進,它允許開發者在介面上的任意兩個檢視之間建立精確的線性變化規則。所謂線性變化就是數學中的一次函式,即:
y = m*x + c
其中x和y是介面中任意兩個檢視的某個布局屬性,m為比例係數,c為常量。例如,如果我們想描述數字鍵5緊貼在數字鍵8下方,我們可以建立如下規則:
每個線性變化規則稱之為布局約束(layout constraint)。由於每個檢視需要確定4個布局屬性才能準確定位,因此一般來說都需要建立4個布局約束。
iOS Autolayout自動布局
在ios程式中,大部分檢視控制器都包含了大量的 用於設定ui布局,設定控制項的水平或垂直位置,以確保元件在不同版本的ios中都能得到合理的布局 甚至有些程式設計師希望在不同的裝置使用相同的檢視控制器,這就給 新增了更多的複雜性!自動布局autolayout的引入很好地解決了這一問題!autolayo...
ios AutoLayout基礎知識 彙總
三大部分 二 storyboard 三 code to autolayout 一 autolayout簡介 autolayout 是乙個描述各種約束的行為,比如,乙個view 距離父view上邊距多少,相鄰之間的間隔,各個view之間的寬高關係等等 二 storyboard 第一部分 1.什麼是約束...
學習 iOS Autolayout的一點經驗
以下是最近在學習autolayout的過程中學到的一些東西,全出於自己的理解,不對的地方望大家指出。對於普通的檢視uiview來說,想要正確完成檢視的布局,就得建立足夠的約束,普通檢視無法計算自身的寬高,所以在建立約束時,要麼新增關於檢視寬高的約束,要麼新增足夠的其他約束,保證這些檢視可以計算出自身...