簡體   English   中英

如何在使用不同的大小類時修復wAny hAny的缺失/沖突約束

[英]How to fix missing/conflicting Constraints for wAny hAny when using different Size Classes

我想要實現的目標

我想要為所有常規高度垂直排列兩個相等高度的視圖。 但是,對於Compact Heights,我希望水平排列視圖。 如下圖所示:

在此輸入圖像描述

為此,我在適用於所有內容的wAny-hAny size類中添加了一般約束。 然后我為wAny-hRegular和wAny-hCompact大小類添加了特定的約束。 這適用於wAny-hRegular和wAny-hCompact(以及在模擬器中測試應用程序),但它讓我在wAny-hAny中缺少約束。 如果我在wAny-hAny中添加那些缺少的約束,那么我在wAny-hRegular或wAny-hCompact中得到沖突的約束。 我不知道如何擺脫錯誤。

以下是對我所做的更詳細的解釋。

我是怎么做到的

通過執行以下步驟,我能夠在模擬器中獲得一些功能。

wAny hAny

在此輸入圖像描述

對於任何寬度任何高度我設置以下4個約束:

在此輸入圖像描述

也就是說,我將藍色固定在頂部和左側,我將紅色固定在右側和底部。 無論使用何種大小類,都始終需要這些約束。

wHny hRegular

在此輸入圖像描述

對於任何寬度常規高度,我添加了以下4個約束:

在此輸入圖像描述

也就是說,我將藍色固定在右側,紅色固定在左側。 我還將紅色的上邊緣固定在藍色的下邊緣。 而我的紅色和藍色相等。 這解決了常規高度的所有約束問題。

wAny hCompact

在此輸入圖像描述

對於任何寬度緊湊高度我添加了以下4個約束:

在此輸入圖像描述

也就是說,我將藍色固定在底部,紅色固定在頂部。 我還將紅色的右邊緣固定在藍色的左邊緣。 我做了紅色和藍色相等的寬度。 這解決了Compact Height的所有約束問題。

問題

通過上面的設置,一切都可以在故事板預覽中看到(請參見上面的第一張圖片),並且在我測試的所有尺寸的模擬器中都能正常工作。

但是,在Interface Builder中,我收到了wAny hAny Size Class的以下Missing Constraint錯誤:

在此輸入圖像描述

這有點像catch-22,因為如果我嘗試添加缺少的約束,那么我會使用Regular或Compact Size Class約束創建沖突的約束。 以Compact為例:

在此輸入圖像描述

我該如何解決這個問題?

我認為您只需要為wAny-hCompact大小類添加特定約束。 並確保正確安裝了特殊約束。

見下圖。

在此輸入圖像描述

這是因為在兩個不同大小的類中,單個視圖有兩種不同的約束。 因此,在使用不同的大小類時,修復wAny hAny的缺失/沖突約束的問題,嘗試從wAny hAny大小類中卸載附加約束,這些約束是在wAny hCompact或任何其他大小類中添加的。

你可以這樣做:

腳步:

  1. 如果實用程序區域未打開,請選擇“視圖”>“實用程序”>“顯示實用程序”。
  2. 選擇包含要更改的約束的視圖。
  3. 選擇要安裝或卸載的約束。 Constraint檢查器在實用程序區域中打開。
  4. 在Constraint檢查器中,單擊Installed屬性旁邊的Add按鈕(+),然后從彈出菜單中選擇所需大小的類。

在此輸入圖像描述

從彈出菜單中選擇大小類后,Constraint檢查器中將顯示該大小類的新條目項。

在此輸入圖像描述

注意 :如果已存在所需大小類的現有條目項,請跳過此步驟。

  1. 選中所需輸入行的復選框以安裝該大小類的約束。 取消選中該復選框以卸載約束。

仍會創建已卸載約束的運行時對象。 但是,它不包含在視圖層次結構中。

Constraint檢查器顯示一個或多個條目項,顯示是否為大小類安裝了約束。 尺寸類的每個輸入行都以刪除按鈕(x)開頭,后跟尺寸類,然后是選擇復選框。 尺寸類顯示寬度(w)和高度(h)。 C用於緊湊大小類,R用於常規大小類,Any用於任何大小類。

您可以在此Apple文檔中找到有關安裝和卸載大小類約束的詳細說明。

借助xcode 7及更高版本提供的UIStackView ,您可以輕松實現所需的UIStackView

UIStackView的Apple文檔

關於UIStackView的一個很好的教程

暫無
暫無

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

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