2017-12-14 15 views
0

次のプレイグラウンドコードが与えられた場合、2つのボタンがStackView全体を埋めることが予想されます。UIStackViewに表示するためにUIButtonに制約が必要な理由

import UIKit 

let button = UIButton(type: .custom) 
button.setTitle("My Button", for: .normal) 
button.backgroundColor = .purple 

let anotherButton = UIButton(type: .custom) 
anotherButton.setTitle("Another Button", for: .normal) 
anotherButton.backgroundColor = .orange 

var stackView: UIStackView = UIStackView(frame: CGRect(x: 0.0, y: 0.0, width: 300, height: 300)) 
stackView.axis = .vertical 
stackView.spacing = 10.0 
stackView.distribution = .fillEqually 
stackView.alignment = .fill 

stackView.addArrangedSubview(button) 
stackView.addArrangedSubview(anotherButton) 
stackView 

しかし、どれも表示されません。しかし、いずれかのボタンに1pxの幅制約を追加すると、両方のボタンが予想どおりにレイアウトされます。

button.widthAnchor.constraint(equalToConstant: 1) 

私は困惑しています!なぜこの単一の制約が違いになるのですか?ボタンを正しくレイアウトするために「ダミーの制約」を追加するのではなく、何か他のことを行う必要がありますか?

答えて

0

それは遊び場のバグかもしれないが、これはどのwidthAnchor制約

override func viewDidLoad() { 
    super.viewDidLoad() 
    // Do any additional setup after loading the view, typically from a nib. 

    let button = UIButton(type: .custom) 
    button.setTitle("My Button", for: .normal) 
    button.backgroundColor = .purple 



    let anotherButton = UIButton(type: .custom) 
    anotherButton.setTitle("Another Button", for: .normal) 
    anotherButton.backgroundColor = .orange 

    var stackView: UIStackView = UIStackView(frame: CGRect(x: 0.0, y: 100.0, width: 300, height: 300)) 
    stackView.axis = .vertical 
    stackView.spacing = 10.0 
    stackView.distribution = .fillEqually 
    stackView.alignment = .fill 

    stackView.addArrangedSubview(button) 
    stackView.addArrangedSubview(anotherButton) 

    self.view.addSubview(stackView) 
} 

enter image description here

+0

なしのアプリで私と一緒に働いていたすべての権利 - ご返信/テストをありがとう! ButtonView内でボタンがどのように動作するかを素早く検証したいと考えていました。これを実現する最速の方法はPlayGroundでしょう。しかし、もう一度、PlayGroundが私のコードをどのようにレンダリングするかに頼ることができないのではないでしょうか。 – ckibsen

関連する問題