2013-11-20 70 views
0

開始我想這樣做UIViews,UILabels等使用的InterfaceBuilder這樣從屏幕中間對齊的開始......對齊的UIView從屏幕中間

藍 - 屏幕中間

紅色 - 控制從中間對齊朝着屏幕邊界。

enter image description here

什麼能所需的約束(S)?

+0

你想在IB或代碼中做到這一點?你需要意見來維持這種輪換安排嗎? – rdelmar

+0

InterfaceBuilder –

+0

您是否在我的評論中看到我的附加問題? – rdelmar

回答

1

你可以給頂視圖約束到屏幕的與那一半寬度的值的左邊緣的屏幕。然後,您可以選擇所有視圖,然後在畫布右下角的「對齊」按鈕的「添加新對齊約束」部分下選擇「Leading Edges」。

+0

我現在正在做這件事,就像你提出的方式一樣,結合@John Riselvato的回答 –

+0

@FredericYesidPeñaSánchez,你真的不應該將約束與設置框架的代碼結合起來。當你使用約束時,你不應該明確地設置任何框架 - 用約束來做所有事情。 – rdelmar

+0

別擔心,我正在使用計算,但沒有設置框架。基本上鍊接頂視圖約束的IBOutlet並相應地調整它的「常量」屬性。 –

1
float middle = self.view.bounds.size.width/2; 

for (int i = 0; i < 10; i++) { 
    UIView* view = [[UIView alloc] initWithFrame:CGRectMake(middle, 0.0 + (75.0 * i), 100.0, 50.)]; 
    [self.view addSubview:view]; 
} 

很簡單,只需設置x位置在屏幕的中間在的CGRect

+0

在IB上有這種方法嗎? –

1

你基本上是尋找每個孩子的前沿是父母的一半寬度。

根據該文檔,constraintWithItem:...使用公式attribute1 == multiplier × attribute2 + constant,所以對於每個子視圖,你可以用約束做到這一點:

[NSLayoutConstraint constraintWithItem:view 
          attribute:NSLayoutAttributeLeading 
          relatedBy:NSLayoutRelationEqual 
           toItem:view.superview 
          attribute:NSLayoutAttributeWidth 
          multiplier:0.5 
           constant:0] 

,而不是爲每個孩子一旦這樣做,你可以創建一個子視圖以一個約束託管所有的孩子。

就接口生成器而言,Xcode 5中沒有任何東西。可以讓你這樣做,但你應該檢查開發者程序的beta版。

+0

事實上,有一個混合的解決方案,工作得很好,看到你之前的兩個答案......另外添加一個子視圖來保存其他視圖對我來說似乎並不舒服。 –