2014-09-19 66 views
4

我真的不明白這個......的邏輯......奇怪的iOS佈局系統。iOS佈局爲什麼中心約束不夠?

我把一個UILabel的約束對齊中心X到Superview。

爲什麼它抱怨需要X位置的新約束?

center is center no?

+1

它還需要知道寬度是固定的,還是應該隨屏幕擴展。 – rdurand 2014-09-19 12:58:48

+0

另外,請看[Ray Wenderlich的2部分自動佈局教程](http://www.raywenderlich.com/50317/beginning-auto-layout-tutorial-in-ios-7-part-1) – rdurand 2014-09-19 13:11:40

回答

3

您需要詳細瞭解視圖的水平位置。居中視圖並沒有說它具有固定的寬度,或者應該保持視圖周圍的前/後空間。

這裏有兩個可能的選項(也有與固定縱橫比固定的高度,如在@Moshe他的回答說):

  1. 你的視圖將始終具有的61的寬度(例如) :

Fixed width

  • 你的視圖將具有在左/右側的固定前緣和後空間:
  • Leading/trailing

    +0

    好的,解決了我的問題,但根據不同語言的不同句子長度,是否可以告訴標籤使用容器中可用的所有水平空間? – 2ndGAB 2014-09-19 13:30:24

    +0

    您可以使用第二個選項,併爲前導空間和尾隨空間設置0 – rdurand 2014-09-19 13:34:47

    +0

    好的,很好理解,非常感謝大家。 – 2ndGAB 2014-09-19 14:24:18

    4

    該警告是誤用。這並不意味着沒有限制。應該說「沒有足夠的約束來計算X位置」。

    您需要爲X的位置添加一個約束,但是您還需要給自動佈局提供足夠的約束來計算視圖的寬度。

    您既可以提供領先空間也可以提供尾部空間,或者您可以提供寬度,或者您可以提供高度和比率。 Autolayout只需要一些工作。

    0

    如果你確實添加了一箇中心x約束,這應該是足夠的自動佈局來計算x位置。但是你確定你沒有設置中心約束嗎?在Interface Builder中拖動這些行的方向可能會造成混淆,因此當您打算設置x約束時,您可能會不小心設置了約束條件。如果您嘗試居中x,則您仍然需要y位置的約束,無論是垂直居中還是從頂部或底部到超視圖或其他視圖的空間。