2015-10-05 67 views
6

當我試圖實現

我想對所有普通高地垂直排列的高度相等的兩個視圖來修復丟失/衝突的約束爲溫妮HANY。但是,對於Compact Heights,我希望水平排列視圖。這是如下圖所示:如何使用不同尺寸的類

enter image description here

要做到這一點,我在適用於一切溫妮 - 哈尼尺寸級別添加一般的約束。然後我爲wAny-hRegular和wAny-hCompact大小類添加了特定約束。這對wAny-hRegular和wAny-hCompact(以及用於在模擬器中測試應用程序)的工作正常,但它在wAny-hAny中留下了缺少約束條件。如果我在wAny-hAny中添加這些缺失的約束,那麼我會在wAny-hRegular或wAny-hCompact中得到衝突約束。我不知道如何擺脫錯誤。

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

我如何試圖做到這一點

我能得到的東西,通過執行以下步驟在模擬器中工作。

溫妮HANY

enter image description here

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

enter image description here

也就是說,我寄託藍色頂部和左,我把紅色固定在右邊和底部。無論使用什麼尺寸的類,總是需要這些約束。

溫妮hRegular

enter image description here

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

enter image description here

也就是說,我寄託藍色的權利和紅色左邊。我還將紅色的上邊緣固定在藍色的底邊。我做了紅藍相等的高度。這解決了常規高度的所有約束問題。

溫妮hCompact

enter image description here

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

enter image description here

即,我釘扎藍色至底部和紅色到頂端。我也把紅色的右邊緣固定在藍色的左邊緣。我做了紅色和藍色的等寬。這需要處理緊湊高度的所有約束問題。

的問題

通過以上的設置一切正常,因爲它應該在故事板預覽(見上第一圖像),並在模擬器,我測試了所有尺寸。

然而,在界面生成器,我得到以下缺失約束錯誤的溫妮HANY尺寸級別:

enter image description here

這是一個有點左右爲難,因爲如果我嘗試添加缺少的約束然後我創建衝突的規則或緊湊尺寸類約束。下面是緊湊型爲例:

enter image description here

我該如何解決這個問題?

回答

5

我想你只需要爲wAny-hCompact大小類添加特定的約束。並確保特殊限制已正確安裝。

看到下面的圖片。

enter image description here

+1

你說得對。我只需要在AnyAny中設置所有約束,然後在AnyCompact中添加特殊約束。之後,我卸載AnyCompact中衝突的約束。爲了卸載約束,我必須更多地學習@ AkshaySunderwani的答案(即文檔)。我不能只是取消選擇「安裝」,因爲它會爲每個大小類別卸載它。我必須在約束檢查器中添加特定的大小類(AnyCompact),然後將其卸載。 – Suragch

4

這是因爲對於兩個不同大小的類中的單個視圖有兩種不同的約束。因此,在使用不同的Size Classes時,嘗試從wAny hAny size類中卸載額外的約束,這些約束類都是在wAny hCompact或任何其他大小類中添加的,因此,修復了wAny hAny的缺失/衝突約束問題。

你可以這樣說:

步驟:

  1. 如果公用事業領域不開放,選擇View>工具>顯示工具。
  2. 選擇包含要更改的約束的視圖。
  3. 選擇您想要安裝或卸載的約束。約束檢查器在公用程序區域中打開。
  4. 在「約束」檢查器中,單擊「已安裝」屬性旁邊的添加按鈕(+),然後從彈出菜單中選擇所需的類大小。

​​

從彈出菜單中選擇一個尺寸級別後,該尺寸類的新條目項出現在約束檢查。

enter image description here

注意:如果已經有針對所需的尺寸類別的現有項項目,跳過此步驟。

  1. 選中所需條目行的複選框以安裝該大小類的約束條件。取消選擇複選框以卸載約束。

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

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

你可以在這apple document on installing and uninstalling constraint for size classes找到詳細的解釋。

1

所有你需要的可以與UIStackView的幫助,可以從Xcode的7及以上的可以輕鬆實現。

Apple Documentation of UIStackView

A good Tutorial on UIStackView

+0

這些對於'UIStackView'來說是一些很好的鏈接,並且可以很容易地單獨進行垂直佈局或水平佈局。但是,根據設備的大小和方向,Stack View將如何自動從垂直變爲水平(或反之亦然),這並不是顯而易見的。你能否填寫你的答案多一點? – Suragch