2015-05-25 170 views
0

想象一下您並排放置三個按鈕的情況。你需要三個按鈕來填充可用的寬度,並且是最小尺寸的完美正方形,它們之間有一定的空間。要這樣設置,你將有以下限制:限制空間時減少元素之間的空間量

答:
1:1的比例甲
通往上海華
寬度和高度> = 25

B:
相等的寬度和高度甲
導致:50

C:
相等的寬度和高度,以甲
主導到B:50
尾隨至上海華

現在想象的可用寬度足夠小,使得沒有在爲了保證按鈕與它們中的每50之間完美的正方形足夠的水平空間。而不是打破縱橫比和寬度約束,而是希望減少按鈕之間的空間量。我的問題是,你怎麼做?

我想我只是改變的領先制約的關係,小於或等於,但這會導致不等式約束歧義與這兩個約束條件。我想或許我需要爲領導指定一個最小值,所以我添加了兩個更大的領先約束,設置爲大於或等於10.這不能解決歧義問題。然後我又添加了一組領先約束,這次等於兩個值之間的一個設定值,然後我減少了這些約束的優先級。這解決了歧義,但按鈕之間的空間永遠不會減少 - 儘管其優先級降低,但它總是爲約束設置的值與等於約束。

需要設置哪些約束條件才能獲得?

  • 三個按鈕以相同的水平空間並排顯示
  • 所有這三個按鈕是完美的正方形
  • 的最小尺寸爲按鈕(25×25)
  • 一組量的它們之間的空間 - 50
  • 當水平空間太小而不能確保所有約束都能滿足時,它應該減少按鈕之間的空間量。

回答

1

你會想要一個間隔約束在所需的優先級,表示最小允許的間距。例如,> = 10 @ 1000。

然後,你想在表達期望的間距與平等,比如== 50 @ 200低優先級的間隔限制。

但是,您有兩個按鈕間隔。不明確之處是因爲自動佈局不知道在沒有足夠的可用空間來製作所需的距離時要減少哪一個。

您可以設置不同的優先事項來解決歧義,但隨後而另一個保持在50,直到它達到最小值,此時對方會減少一個間距就會崩潰了。

我懷疑你希望兩個空格始終相等。沒有直接的方法來做到這一點,只是有限制。相反,您需要使用隱藏的間隔視圖。所以,你會這樣做:

|-[buttonA][spacer1(>=10,[email protected])][buttonB(==buttonA)][spacer2(==spacer1)][buttonC(==buttonA)]-| 
0

嘗試製作每個按鈕UIViewContentModeScaleAspectFit或任何IB稱之爲的內容模式。然後控制使用寬度而不是leading之間的空間。我猜測,敲擊之間的空間會調用按鈕的目標,所以在這種情況下使用三個常規的UIViews這種方式,然後添加按鈕作爲他們的子視圖。

0

我最終決定避免間隔視圖,並制定出解決方案來實現最終結果。我不是設置它,所以自動佈局會計算出計算結果並自動減少按鈕之間的空間,所以我決定根據視圖的寬度以編程方式設置這些約束的constant。因此,確保按鈕之間的空間對於大寬度是大的,對於小寬度是小的。

爲了實現這一點,我簡單地設置了水平約束的出口集合,然後在updateViewConstraints中環繞約束並將constant設置爲等於self.view.frame.size.width/12