1. 程式人生 > >iOS AutoLayout 百分比佈局

iOS AutoLayout 百分比佈局

本文為原創,未經允許勿轉載

本文記錄如何在 UIStoryboard 或者 xib 中進行百分比佈局,包括

  • View.Width 佔其 Superview.Width 的百分比
  • View.Leading 與 Superview.Leading 間距佔 Superview.Width 的百分比
  • View.Trailing 與 Superview.Trailing 間距佔 Superview.Width 的百分比
  • View.Leading 與 Superview.CenterX 間距佔父檢視 Superview.Width 的百分比
  • 限定View的寬高比
  • 以 Superview.Width 寬度的某一百分比為 View 之間的間隔

iOS NSLayoutConstraint priority 一文中提到過 multiplier, 上述提到的百分比佈局都是基於 multiplier 實現的,下面來一一檢視其實現。

View.Width 佔其 Superview.Width 的百分比

該功能實現很簡單,以一個居中的按鈕 Button 為例,首先將按鈕相對於父容器新增 Equal Width 的 constraint,然後將它的 multiplier 設成 0.2,這樣就可實現 Button1 的寬度為父容器寬度的 0.2 倍。操作步驟如下:

View寬度佔父檢視寬度百分比

View.Leading 與 Superview.Leading 間距佔 Superview.Width 的百分比

該功能實現其實是使 View.Leading 相對於 Superview.Trailing 佈局,然後再調整 multiplier 引數實現,如下操作步驟實現了將 Button 的左邊距離父檢視左邊界的距離站父檢視寬度的0.2倍,如下:

View.Leading與Superview.Leading間距佔Superview.Width的百分比

View.Trailing 與 Superview.Trailing 間距佔 Superview.Width 的百分比

該需求實現是使 View.Trailing 相對於 Superview.Trailing 佈局,然後再調整 multiplier 引數,需要注意的是使用 Reverse First And Second Item 調整如下表達式中 item1 和 item2 在等式中兩邊的位置。

item1.attribute1 = multiplier × item2.attribute2 + constant

以下步驟實現 Button 的 Trailing 距離父檢視右邊距為父檢視寬度的0.2倍,需要注意的是,此時的 multiplier 是 (1-0.2=0.8),在修改 Button 約束值時,可以從頂部導航中看到約束表示式的變化:

View.Trailing 與 Superview.Trailing 間距佔 Superview.Width 的百分比

View.Leading 與 Superview.CenterX 間距佔父檢視 Superview.Width 的百分比

有時間需要將 UI 元件相對於父檢視的中線進行佈局,比如將 View.Leading 與父檢視中線的距離設定為父檢視寬度20%, 即相對於父檢視 CenterX 的 multiplier 值為 1.4

View.Leading 與 Superview.CenterX 間距佔父檢視 Superview.Width 的百分比

限定View的寬高比

有時候我們需要保持檢視的寬高比不變進行縮放,此時可以設定其 Aspect Ratio 保持其在進行縮放時寬高比固定。

以 Superview.Width 寬度的某一百分比為 View 之間的間隔

要實現這個需求就沒有之前那麼簡單了,這需要新增一個間距檢視,設定每個檢視與相鄰間距檢視的邊緣間距約束,然後給所有的間距檢視新增相對於其父檢視的等寬約束,設定合適的比例即可。這裡借用 為iPhone 6設計自適應佈局 文中一圖:

以 Superview.Width 寬度的某一百分比為 View 之間的間隔

參考:

如果覺得本文對你有幫助,就請用微信打賞我吧^_^

如果覺得本文對你有幫助,就請用微信打賞我吧^_^

請葉秋喝杯咖啡吧