ios 約束(一)

1、什麼是約束

    約束就是一系列描述iOS程序視圖佈局的規則。他們限定了視圖之間的關係,也限定了視圖的佈局形式。使用約束時。我們可以說“這些視圖在水平方向上必須對齊”,或是“此視圖必須根據另一個視圖來調整自身高度,以便與之相符”。約束向開發者提供了一套佈局語言,使得可以向視圖裏添加約束,並以此來描述各視圖的空間關係。

    iOS負責通過一套約束滿足系統來實現這些佈局需求。規則必須有意義。不能說某視圖既位於另一個視圖左側,又位於它的右側。使用約束時的一個難點就是如何保證規則之間總是協調一致的。假如規則之間有衝突,那麼開發者將收到明確的通知。Xcode會提供詳盡的記錄信息來解釋具備的錯誤情況。

    另一個難點在於規則要指定的足夠具體纔行。如果對界面施加的約束過少,那麼可能會產生不符合預期的佈局,因爲有很多佈局方案可供選擇。我們可能會要求某視圖處在另一個視圖右側,但是假如不指定垂直方向上的規則,那麼系統就可能會把右側這個視圖排布在屏幕頂端,而把左側那個視圖排布在屏幕底端。

    有了約束,就可以製作出不依賴於分辨率的應用程序了。對於一款針對4英寸的屏幕的iPhone而製作的應用程序,只要是基於約束的,那麼不用修改任何代碼,就可以直接運行在5英寸的iPhone上。

    對於需要進行本地化的程序來說,不要爲每種界面語言都創建XIB,而是應該採用約束。基於約束的XIB可以使用多種界面語言。

    開發者可以在IB中以可視化的形式來指定約束,也可以在程序源碼中以編程的形式來製作約束。

2、約束系統所用的屬性

    約束所用的詞彙非常有限,就是一些與幾何特徵有關的屬性及關係。屬性是約束系統中的“名詞”,用來描述視圖對齊矩形裏的位置。稍後我們會詳細解釋對其矩形這一概念,而現在大家可以把它看作與視圖的框架緊密相關的一個東西。關係是系統裏“動詞”,用於在屬性之間進行比較。

    屬性名稱描述的是物理特性。約束系統提供了下面這幾個“名詞”,用來描述視圖的相關屬性:

    1、left、right、top、bottom——視圖對齊矩形的左、右、上、下邊界。他們分別對應於視圖的最小X值、最大X值、最小Y值以及最大Y值。

    2、leading及trailing——視圖對齊矩形的前邊沿及後邊沿。在從左至右的書寫系統裏,前邊沿就是“左”,後邊沿就是“右”。

    3、width與height——視圖對齊矩形的寬度和高度。

    4、centerX與centerY——視圖對齊矩形的中心點x軸和y軸的座標。

    5、baseline——對齊矩形的基線,通常比bottom屬性小一些,而且兩者之間的偏移量通常是某個定值。

    關係動詞用於比較屬性值之間的關係。在約束系統的數學運算中只有三種關係:我們可以限定兩個屬性必須相等,也可以限定其下界和上界。可以使用下面三種佈局關係:

    1、Less-than inequality(小於或等於)——NSLayoutRelationLessThanOrEqual

    2、Equality(等於)——NSLayoutRelationEqual

    3、Greater-than inequality(大於或等於)——NSLayoutRelationGreaterThanOrEqueal

    可能覺得上面這三種關係不會產生太多的佈局組合。但實際上,這三種關係可以把排布用戶界面時所需的各種佈局情況全都涵蓋進來。通過這三種關係,我們可以給屬性指定具體的值,也可以指定其上限或下限。

約束系統所用的數學算式

    對於所有的約束規則,無論它是如何創建處理的,其本質都可歸結爲下列形式的等式或不等式:

    y關係m * x + b

    如果掌握了一下數學知識,那麼可能會熟悉另一個與上述算式很相似的表述形式,式中的R就表示y與右側運算值之間的關係:

    yRm * x + b

    y與x都是上面介紹過的那些視圖的屬性,比方說width、centerY或top。而m則是個表示縮放比例的常數,b是表示偏移量的常數。例如,我們可以規定,“B視圖的左界應該位於A視圖右界的右方15點處”。那麼關係式可以寫成:

    B視圖的左界 = A視圖的右界 + 15

    這是個“等於”關係,偏移量常量(b)是15,縮放倍數或放大倍數是1。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章