2014-09-13 45 views
3

我試圖將我的應用程序轉換爲使用自動佈局。自動佈局將兩個標籤對齊彼此

這是它應該是怎樣看(我用的自動佈局前): enter image description here

現在我不知道該如何實現以下使用自動佈局:

  1. 左邊的文本標籤(其中22:35)必須位於KL1032標籤的水平 中心,而不存在正確的標籤(其中 -14分鐘)。
  2. 如果實際存在正確的標籤,則 22:35標籤的右邊緣應與KL1032 標籤的水平中心對齊,並且-14分鐘標籤的左邊緣也應與水平對齊 就像在屏幕截圖中一樣,在標籤之間留下一小塊空間 。

我需要使用哪些約束條件來達到此目的?我是否也使用內容擁抱優先級?

我試着只集中22:35標籤,如果正確的標籤是空的/不存在,這很好。但是,當正確的標籤存在時,這當然不能正確工作。

回答

2

將每個標籤嵌入到一個視圖中,併爲所有視圖指定最小寬度約束爲14.然後,按照正確標籤爲空時的描述進行調整。所以,你的佈局嵌入觀點:

screenshot 1

+0

這似乎與問題想要的相反。 – 2014-09-13 13:22:03

+0

@KenThomases不,這允許佈局保持不變,即使標籤爲空。我就是這樣讀他的問題的。 – 2014-09-13 13:23:57

+0

他希望在正確的標籤不存在/空白時更改佈局。 – 2014-09-13 13:24:15

1

你將不得不添加和刪除「(-14分鐘)」的標籤,而不是僅僅把它隱藏或將其設置爲空。

設置22:35標籤的水平中心與KL1032標籤的水平中心對齊,但優先級稍低(比如說750)。還要設置一個約束,以便後邊距大於或等於KL1032標籤的中心,減去所需的任何微小間距。這個應該優先1000(必需)。

當「(-14分鐘)」標籤應該存在時,添加它並對其設置約束。將其領先優勢限制在22:35標籤的後沿加上您期望的間距。還要創建一個約束來將其中心與KL1032標籤的中心對齊,但將其優先級設置爲介於必需(1000)和以22:35標籤爲中心的約束之間(例如800)。佈局系統將無法居中,因爲這會迫使22:35標籤超過其要求的限制,但它會盡可能接近它。

當該標籤不應出現時,只需將其從層次結構中移除,這也將消除其約束。 22:35標籤將回到居中(因爲它可以和它「喜歡」)。

如果您願意,可以在兩個標籤都存在的情況下在NIB中進行佈局。將網點設置爲「(-14分鐘)」標籤並對其加以限制。將它們設爲strong是因爲您將暫時從層次結構中刪除它們,但不希望它們被釋放。這樣,您的代碼就可以根據需要刪除並重新添加它們,而無需在代碼中表達約束條件。


編輯:哦,你會希望有一個約束設置「(-14分鐘)」標籤的基線等於22:35標籤的基線。您必須每次都在代碼中添加該代碼,或者在NIB中使用強大的插座進行設置,並且每次都重新添加它,就像其他代碼一樣。


編輯2:另一種方法發生在我身上。您可以在層次結構中保留「(-14分鐘)」視圖,並始終保留所有約束條件。如果不希望顯示,請將視圖設置爲隱藏,並將其中心與KL1032標籤中心之間的約束條件設置爲更大的值。絕對足夠大以允許22:35標籤以其居中的偏好位置,可能足夠大以至於不在屏幕外。

由於您不希望22:35標籤一直跟隨它,所以建立這兩個標籤之間的間距的約束應該是「大於或等於」而不是「相等」。此更改不會取決於是否顯示「(-14分鐘)」標籤。這就是該約束應該如何。

如果您確實需要顯示「(-14分鐘)」標籤,請重置嘗試將其居中置回constant等於0的約束。另外,當然也可以取消隱藏。

+0

非常詳細的答案,謝謝。但是我怎樣才能「設置一個約束條件,使後邊緣大於或等於KL1032標籤的中心」。我可以對齊這兩個標籤的尾部邊緣,但我看不到如何將22:35標籤的尾部邊緣與KL1032標籤的中心對齊。 – edwardmp 2014-09-13 17:19:12

+0

創建幾乎所有的水平約束。例如,創建一個對齊兩個視圖中心X的對象。然後,在文檔大綱中選擇新的約束並打開屬性檢查器。您將可以更改要關聯的視圖的哪些屬性。您可以將它從CenterX和CenterX更改爲一個和另一個的CenterX的尾隨。然後,您還可以調整常量以創建間距。 – 2014-09-13 17:27:19