簡體   English   中英

自動布局如何在具有3個相等寬度視圖的視圖中隱藏1個視圖

[英]Auto layout how to hide 1 view in a view with 3 equal width views

目前我在1個視圖中有3個視圖(固定在superview的前緣和后緣)。

這3個視圖目前看起來像這樣:

3個寬度相等的視圖

但是,在某些情況下,我希望隱藏靛藍視圖,但仍保持最后2個相同的寬度,如下所示: 2個視圖寬度相等,隱藏靛藍視圖

如何通過autolayout實現這一目標? 或者我如何使用IBOutlets實現約束?

如果部署目標是iOS9或更高版本 ,建議使用UIStackView作為封閉視圖。 UIStackView排列的任何視圖上設置isHiddentrue不僅會使視圖隱藏,而且堆棧視圖也會重新組織所有非隱藏視圖以填充隱藏視圖所占用的空間。 可以通過調整UIStackView distribution來調整此行為。


Tj3n的答案有效,但它有一個缺點,你必須在你的代碼中使用幻數,並在代碼和IB中設置約束屬性。

恕我直言,更好的解決方案是在IB中設置具有不同優先級的所有約束,並在代碼中激活/停用它們。 嘗試這個:

  1. 像以前一樣設置前導/尾隨約束。
  2. 為優先級high所有三個視圖設置相等的寬度約束。
  3. 為所有三個視圖設置0寬度約束,但required優先級,但在IB中將它們取消激活。 並將它們連接到代碼中的IBOutlet ,就像連接視圖一樣。
  4. 激活任何0寬度約束以折疊所需視圖,然后停用它們以展開。

請注意,只有1和2就位,您可以實現等寬視圖布局。 使用3和4,您可以有選擇地折疊/展開任何視圖。

它非常簡單,你可以為3視圖創建相等寬度約束A,設置其優先級為998,然后為它們創建另一個單寬度約束B1,B2,B3,設置優先級為997,如果要隱藏任何3個查看,將B約束的常量設置為0,然后將其優先級設置為999,然后調用self.view.layoutIfNeeded ,視圖將隱藏,其他將縮放

測試約束是灰色視圖的寬度約束: 在此輸入圖像描述

如果它始終是可以隱藏的靛藍視圖,您應該通過添加此約束來解決您的問題:

靛藍視圖:導致superview +尾隨到purpleView +寬度約束

紫色視圖:與grayView相同的寬度

灰色視圖:導致purpleView +尾隨到superview

它應該是這樣的:

約束

視圖

如果你改變你的indigoView的寬度屬性,所有都應該正確遵循。

希望對你有所幫助。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM