6

這似乎是一個非常基本的問題,但我找不到答案。在Xcode 4中手動指定約束interfacebuilder/storyboard

當我向故事板中的場景添加元素,或者拖動它們或調整它們的大小時,Xcode會自動添加和刪除約束條件來描述它們的大小和位置。

現在,一旦Xcode中創造了一個特定類型的約束 - 說,一個高度約束 - 我知道,我可以修改它的屬性 - 通過屬性檢查器 - Relation,在高度約束的情況下ConstantPriority。我所知道的不能算出是如何手動添加或移除給定類型的約束,而不是依靠Xcode的魔術來爲我這樣做。

screenshot showing the same stuff described in the paragraph above

例如,在我目前的情況,我有一個包含一個工具欄和一個表視圖中的視圖控制器。現在,我知道我想用來形容這兩個觀點的垂直位置和大小到底是什麼制約因素:

  • 工具欄的頂部有垂直空間0從屏幕頂部
  • 的工具欄具有固定高度
  • 表視圖的底部具有垂直空間0從屏幕
  • 表視圖的頂部的底部具有垂直空間0從工具欄的底部

這樣桌面視圖的高度將根據屏幕尺寸進行適當調整。然而,Xcode在它的智慧中已經認定這不是我想要的,而是對我造成了以下限制(不管我多少次隨機拖動它都不想改變東西周圍和祈禱):

  • 工具欄的頂部有垂直空間0從屏幕頂部
  • 工具欄的底部有垂直空間526從屏幕
  • 表的底部視圖從屏幕底部開始具有垂直空間0
  • 表視圖擁有526

其結果是一個固定的高度,一切都錯了,當我嘗試查看較小的屏幕上我的ViewController,或在容器:

screenshot of EVERYTHING GOING WRONG

不存在當我確切知道我需要的是令人沮喪的時候,能夠手動設置我自己的限制。我如何顯式刪除Xcode自動創建的廢話約束,並手動添加自己的約束?

+0

Just FYI - Xcode 5 DP不會觸及你的約束,除非你問它,即使你有不明確的約束。 Xcode 4的體驗目前確實無法使用。 –

+0

這在現代版本的Xcode中不再是問題。 – jtbandes

回答

1

在IB/storyboard中處理約束時的問題是Xcode永遠不會允許您有模糊的約束。永遠。包括你在編輯過程中的過程。所以,無論何時您想要編輯多個約束,Xcode可能會決定自動添加一些以防止禁用狀態。

這可能是很痛苦的工作。我發現的一些作品是在我設置其他約束條件時在所有四條邊上添加虛假約束。這 - 希望 - 保持IB檢查,並防止它添加完全愚蠢的東西。

您可以從頂部菜單添加約束。點擊對象,然後點擊從菜單到編輯器。您可以使用「對齊」和「插入」子菜單添加約束(隨後可以對其進行編輯)。

注意:並非所有約束都可以在IB中添加。例如長寬比只能在代碼中完成。

PS。 Xcode將只允許你刪除多餘的約束,即不會留下不明確的狀態。因此,要刪除「b * * ** t」約束,您必須先添加足夠的其他人才能創建允許的狀態。

+0

你在所有四條邊上添加了什麼限制? – expert

+1

任何事情,真的。這只是一個臨時修復,而您正在編輯其他約束以防止Xcode 4將它搞亂:)您在完成編輯後將其刪除。例如,只需將每一側固定在超級視圖上即可。 – user1459524