2013-11-01 84 views
9

我有兩個標籤必須水平居中的非常簡單的要求。所以,我選擇了它們並選擇了編輯器 - >對齊 - >水平居中。然後將頂部空間添加到它們的容器約束。我還需要關於內容大小的縮小/增長標籤。但是,IB顯示錯誤和幾個警告。我可以通過在它們之間添加銷釘(水平空間)來使標籤縮小/增長,但它們不會在這種情況下居中。以下是截圖:如何水平居中兩個標籤?

enter image description here

這裏的錯誤和警告:

enter image description here

UPDATE theraven給了一個有趣的建議,使用虛擬視圖水平居中,並釘扎兩個標籤到它。我已經刪除了所有現有的約束條件,添加了這個虛擬視圖和中心X +中心Y約束。然後爲它添加兩個標籤(增加了水平空間限制)。不過,我仍然得到了一堆的錯誤和警告:

enter image description here enter image description here

UPDATE2剛剛更新的問題,但仍然沒有有效的答案找到。 @Theraven解決方法適用於iPhone4,iPhone4S,iPhone5和iPhone5S,但它不是真正的中心,而是一種解決方法。因此,對於iPhone6和iPhone6 Plus,它不起作用,因爲前導和尾隨空格將被固定,並且不會自動調整爲更大的寬度。

+0

'兩個標籤必須水平居中的簡單要求 - 您是否希望將視圖分爲兩部分(左側和右側),然後將標籤集中在每個部分? –

+0

@ArkadiuszHolko是的。 – Centurion

+0

這仍然不明確。你想在左邊緣<->第一個標籤<->第二個標籤<->右邊緣之間有相等的空間。 或左邊之間的空格相等<->第一個標籤<->屏幕中心和屏幕中心<->第二個標籤<->右邊緣。 在第二種情況下,中心空間的差異會更大。一旦你澄清我會修復我的答案。 – theraven

回答

4

要解決這個問題,請在兩個標籤之間使用空白的UIView並水平居中。然後將兩個標籤固定在居中的空白視圖的任一側。在自動佈局中使用像這樣的間隔視圖是慣例。

+0

謝謝,試過你的建議,但沒有運氣。查看更新的答案。 – Centurion

+0

@Centurion更新*答案* ..? –

+0

@TJ theraven答案只適用於固定的偏移量(將尾部空間添加到居中的separatorView(用於左視圖),並將前導空間添加到居中分隔符(用於右視圖)。此解決方法適用於iPhone4,iPhone4S,iPhone5和iPhone5S,但它不是真正的居中,它只是一個解決方法,因此iPhone6和iPhone6 Plus不起作用,因爲前導和尾隨空格是常量,不會自動調整大小。 – Centurion

0

我真的不明白你想做什麼。

您得到的錯誤(在第一個屏幕截圖中)是您缺少標籤x位置的約束。

對於UILabel,您必須對容器視圖有y和x位置約束,當您同時選擇它們並選擇了水平方向的Editor-> align-> center時,您只需說label1.center.x = label2 .center.x。 您仍然需要說明它們將在容器視圖中的位置,您將頂部空間添加到容器,因此您確實擁有y位置,但是您沒有說明x位置應該位於何處。

你說

我有很簡單的要求,其中兩個標籤必須水平居中

但是,他們應該在對於它們的容器?

謝謝

+0

這並不能回答這個問題,要批評或要求作者澄清,在他們的帖子下留下評論 - 你總是可以評論你自己的帖子,一旦你有足夠的[聲譽](http ://stackoverflow.com/help/whats-reputation)你將能夠[評論任何帖子](http://stackoverflow.com/help/privileges/comment)。 –

+0

謝謝!我今天剛剛開始,我真的想留下評論,但我不能,因爲我沒有足夠的聲譽..但我認爲我的答案仍然有一定的價值,因爲部分問題是關於錯誤他得到..無論如何,我得到你在說什麼,謝謝! – oren

+0

@oren請先閱讀問題。假設你將屏幕垂直分割成一半(左半屏幕和右半屏幕),並且你需要左標籤在左半屏幕中水平居中,右標籤將在右半屏幕中水平居中。一個很好的答案就是你自己已經嘗試過的那個答案。 – Centurion

1

我真的不喜歡增加另一個視圖只是爲了estethic的想法。

另一種選擇是水平居中左視圖,水平放置X與右視圖的右視圖。

然後,爲第一視圖的水平對齊約束賦予一個等於第一視圖寬度加上一半視圖距離的負值。或者使用之前評論中提到的乘數。

但是,這隻適用於我認爲固定寬度的意見。

+0

如何「橫向放置一個X的右視圖與左邊的」? –

8

你可以做的是將兩個標籤添加到另一個視圖,如容器視圖。然後,您需要水平居中並添加必要的約束條件。 要添加包含UIView,您可以選擇兩個標籤,請轉至Editor -> Embed In -> View

然後你需要添加約束來使包含視圖符合兩個標籤。因此,像這樣:

首標籤(左邊):

  • 前導空格,以上海華
  • 頂部和底部的空間,以上海華
  • 水平間距下一個標籤

第二個標籤:

  • Tr生病的空間的SuperView
  • 頂部和底部上海華(或對準頂部與第一個)

然後含視圖應該調整爲適合兩個標籤。然後,您只需爲此容器視圖添加頂部偏移量約束,並在父視圖中添加水平對齊。

這樣,包含的視圖就會隨着它需要適應標籤和它們之間的空間而增長,並且將始終以父視圖爲中心。

我截取了我的測試約束條件,以防止它對您有所幫助。

The constraints for the left side label

Right-side label

希望這是你所期待的。

+0

是的,這是有效的方法,但需要多餘的containerView。這就是我早在自動佈局出現之前做過類似的事情的原因。 – Centurion

0

使用spacer視圖是我可以找到的最佳解決方案,儘管它對開發人員來說看起來很醜。用戶甚至不知道幕後發生了什麼,一旦您擁有間隔器UIView,您可以隨時重複使用它。

0

使用居中的UIStackView作爲兩個標籤的容器,需要間距。