私は自分のスタックビューを自動レイアウトしようとしていて、その配列のarrangedSubView(2つのラベルと1つのイメージ)をコードに作成しようとしていますが、シミュレータにはスタックビューのセットが1つしか表示されません。コンソールで結果を印刷するときは、すべてのラベルとイメージに値がありますが、スタックビューのフレームはすべて0.0;0.0
です。なぜこのようなことが起こるのですか?スタックビューが表示されないのはなぜですか?あなたが見ることができるようになぜスタックビューのフレームが(0.0、0.0)ですか?
コード
let contentView: UIView = UIView()
let stackView: UIStackView = UIStackView()
var singleStack = Array(count: 6, repeatedValue: UIStackView())
var timeLabel = Array(count: 6, repeatedValue: UILabel())
var iconImage = Array(count: 6, repeatedValue: UIImageView())
var tempLabel = Array(count: 6, repeatedValue: UILabel())
override func viewDidLoad() {
super.viewDidLoad()
for index in 0...5 {
timeLabel[index].text = "0\(index):00"
iconImage[index].image = UIImage(named: "sunny")!
tempLabel[index].text = "0\(index)°"
singleStack[index].addArrangedSubview(timeLabel[index])
singleStack[index].addArrangedSubview(iconImage[index])
singleStack[index].addArrangedSubview(tempLabel[index])
singleStack[index].translatesAutoresizingMaskIntoConstraints = false
singleStack[index].axis = .Vertical
singleStack[index].alignment = .Center
singleStack[index].distribution = .FillEqually
stackView.addArrangedSubview(singleStack[index])
print("\(timeLabel[index].text!)")
print("\(iconImage[index].image!)")
print("\(tempLabel[index].text!)")
print("\(singleStack[index])")
print("\(stackView)")
}
stackView.translatesAutoresizingMaskIntoConstraints = false
stackView.axis = .Horizontal
stackView.alignment = .Fill
stackView.distribution = .FillEqually
contentView.backgroundColor = UIColor.lightGrayColor()
view.addSubview(contentView)
contentView.addSubview(stackView)
contentView.translatesAutoresizingMaskIntoConstraints = false
NSLayoutConstraint.activateConstraints(NSLayoutConstraint.constraintsWithVisualFormat(
"H:|[stackView]|",
options: [],
metrics: nil,
views: ["stackView": stackView]))
NSLayoutConstraint.activateConstraints(NSLayoutConstraint.constraintsWithVisualFormat(
"V:|[stackView]|",
options: [],
metrics: nil,
views: ["stackView": stackView]))
NSLayoutConstraint.activateConstraints(NSLayoutConstraint.constraintsWithVisualFormat(
"H:|-[contentView]-|",
options: [],
metrics: nil,
views: ["contentView": contentView]))
NSLayoutConstraint.activateConstraints(NSLayoutConstraint.constraintsWithVisualFormat(
"V:[contentView(120)]-16-|",
options: [],
metrics: nil,
views: ["contentView": contentView]))
}
コンソールでの印刷結果(ちょうど例えば1枚を使用)
01:00
<UIImage: 0x7fb61944f630>, {32, 32}
01°
<UIStackView: 0x7fb6194462c0; frame = (0 0; 0 0); layer = <CATransformLayer: 0x7fb619445e70>>
<UIStackView: 0x7fb619443b50; frame = (0 0; 0 0); layer = <CATransformLayer: 0x7fb6194433b0>>
:以下の私のコードを参照してください。すべてのラベルとイメージには値がありますが、スタックビューのフレームはすべて0.0;0.0
です。
誰でも私の問題を解決できることを願っております、あらかじめ大変ありがとうございます!
?今のところ、あなたは '= UIStackView()'を使って両方のスタックビューを初期化しているようですが、デフォルトで0.0、0.0のフレームが返されます。 –
@BenjaminLowry彼は制約を使用しています。 – matt
@matt私が間違っている場合は私を修正しますが、彼は制約が作成される前にスタックビューの値を出力していませんか? –