2016-07-06 110 views
3

我無法設置兩個按鈕相鄰的約束。我需要UIView中間的這兩個按鈕。見下圖enter image description here設置兩個UIButton約束?

可以知道如何設置這些按鈕的約束嗎?

回答

0

這是少用的信息,但您可以通過編程添加約束來添加左邊的空格 - x約束來到頁面中間。 您也可以在小視圖的兩個按鈕,這將使它更容易在中間

+0

使用的觀點是另一種選擇,我正在尋找解決方案來約束。你能告訴我這個例子,爲這些按鈕編程設置約束。你還需要什麼信息? – nadim

1

對準你可以這樣做:

  • 定義水平間距爲您的兩個按鈕,讓我們說10爲例
  • 集中心水平上左鍵的俯視圖,並在此約束集的乘數爲1/2

(不要忘了丟失的制約因素,如您的按鈕和頂部之間的空間頂視圖)

編輯我不建議添加無用的視圖作爲容器。這是不好的做法。乘數是要走的路。

1
  1. 嵌入在一個視圖中的2次(在設計,只需選擇兩個視圖,然後從Xcode的菜單中選擇編輯 - >中嵌入 - >查看)
  2. 爲了施加約束在容器視圖水平居中在容器中的視圖
  3. 最終,你可以申請一個頂部約束在容器視圖本身和視圖控制器的視圖之間
2

你並不需要創建一個額外的UIView解決這個問題!

UILayoutGuide文檔:

有許多與加入僞意見,您的視圖層次結構相關的成本。首先,創建和維護視圖本身的成本。其次,虛擬視圖是視圖層次結構的完整成員,這意味着它會爲層次結構執行的每個任務增加開銷。最糟糕的是,不可見虛擬視圖可以攔截用於其他視圖的消息,導致很難找到的問題。

您可以使用UILayoutGuide s來做到這一點;而不是將按鈕添加到不必要的UIView中。您在按鈕的左側和右側放置一個UILayoutGuide,並將它們的寬度設置爲相等。這將按鈕居中。這裏是如何做到這一點的代碼:

view.addSubview(button1) 
view.addSubview(button2) 

let leftSpace = UILayoutGuide() 
view.addLayoutGuide(leftSpace) 

let rightSpace = UILayoutGuide() 
view.addLayoutGuide(rightSpace) 

let views = [ 
    "leftSpace" : leftSpace, 
    "button1" : button1, 
    "button2" : button2, 
    "rightSpace" : rightSpace 
] 

NSLayoutConstraint.activateConstraints(NSLayoutConstraint.constraintsWithVisualFormat("H:|[leftSpace][button1]-[button2][rightSpace]|", options: [], metrics: nil, views: views)) 
leftSpace.widthAnchor.constraintEqualToAnchor(rightSpace.widthAnchor).active = true 

我已經離開了垂直約束,因爲你只關心水平居中他們,但你需要垂直約束。我相信類似的東西也可以在故事板中完成。

編輯Objective-C的

[self.view addSubview:button1]; 
[self.view addSubview:button2]; 

UILayoutGuide *leftSpace = [[UILayoutGuide alloc] init]; 
[self.view addLayoutGuide:leftSpace]; 

UILayoutGuide *rightSpace = [[UILayoutGuide alloc] init]; 
[self.view addLayoutGuide:rightSpace]; 

NSDictionary* views = @{ 
         @"leftSpace" : leftSpace, 
         @"button1" : button1, 
         @"button2" : button2, 
         @"rightSpace" : rightSpace 
         }; 

[self.view addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"H:|[leftSpace][button1]-[button2][rightSpace]|" options:0 metrics:nil views:views]]; 

[[leftSpace.widthAnchor constraintEqualToAnchor:rightSpace.widthAnchor] setActive:YES]; 
+0

你假設他/她正在使用swift,但他/她沒有說出任何關於它的信息 – ddb

+0

你可以使用Objective-C以稍微不同的語法做完全相同的事情。 – keithbhunter

+0

@ddb你應該看看問題編輯歷史。問題標題在由Eric – Shubhank

3

這裏我已經設置了約束爲同:

1)嵌入你的UIView的&按鈕設置該視圖的約束。 enter image description here

2),用於第一按鈕 enter image description here

3)設置的約束爲第二按鈕 enter image description here

1

選擇兩個按鈕和在UIView的嵌入這兩個按鈕設置約束, embed UIView
水平居中對齊UIView, 爲UIView設置寬度,高度和頂部約束。

你會得到這樣的:

enter image description here

Sample project for this