2017-02-23 56 views
1

我想在屏幕上水平平均分配未知數量的按鈕。我想知道是否可以基於彼此創建其間距。例如下面的代碼可以工作嗎?在SnapKit中,兩個視圖可以相互分隔嗎?

let button1 = UIButton() 
    let button2 = UIButton() 
    superview.addSubview(button1) 
    superview.addSubview(button2) 
    button1.snp_makeConstraints { (make) -> Void in 
     make.height.equalTo(100) 
     make.top.equalTo(50) 
     make.left.equalTo(superview.snp.left) 
     make.right.equalTo(button2.snp.right) 
     make.width.lessThanOrEqualToSuperview() 
    } 

    button2.snp_makeConstraints { (make) -> Void in 
     make.width.lessThanOrEqualToSuperview() 
     make.height.equalTo(100) 
     make.top.equalTo(50) 
     make.left.equalTo(button1.snp.left) 
     make.right.equalTo(superview.snp.right) 
    } 

回答

2

在這種情況下,你真的應該使用UIStackView與水平軸。

也就是說,如果你想使用SnapKit,有很多種方法可以做到這一點。我會建議是,像這樣:

let count = 3 // or buttons.count if you have an array of buttons 

button1.snp.makeConstraints { make in 
    make.width.equalToSuperview().multipliedBy(1.0/count) 
    make.leading.equalToSuperview() 
    make.top.equalToSuperview().offset(50) // or whatever 
    make.height.equalTo(100) 
} 

button2.snp.makeConstraints { make in 
    make.width.top.height.equalTo(button1) 
    make.leading.equalTo(button1.snp.trailing) 
} 

button3.snp.makeConstraints { make in 
    make.width.top.height.equalTo(button1) 
    make.leading.equalTo(button2.snp.trailing) 
    make.trailing.equalToSuperview() 
} 

通知我分別以leadingtrailing代替leftright。如果您需要本地化從右向左的語言,這是一個很好的習慣。然後你的按鈕將按照用戶設備的自然順序排列。

+0

關於UIStackView的好建議絕對是一種更好的方式。 – SmedleyDSlap

相關問題