オブジェクトに 3 つ以上のアイテムが含まれている場合UIStackView
、アイテムをスタック ビューから削除してから再度追加しても、アイテム間の間隔は正常なままです。
ただし、同じUIStackView
オブジェクトに2 つのアイテムが含まれている場合、それらを削除して再度追加すると、それらの間のスペースがなくなります。
この動作の原因は何ですか?どうすれば修正できますか?
そして、これが私の単純なビジュアルに関連付けられた単純なコードです。
import UIKit
class StackViewTest : UIViewController {
let stackView = UIStackView()
let stackViewLabels = [
//When I use three labels instead of two, everything works normally!
//UILabel(),
UILabel(),
UILabel()
]
override func viewDidLoad() {
super.viewDidLoad()
view.backgroundColor = UIColor.whiteColor()
view.addGestureRecognizer(UITapGestureRecognizer(target: self, action: "reloadStackView"))
//initialize stackView
stackView.spacing = 30
stackView.axis = .Horizontal
stackView.distribution = .EqualSpacing
stackView.translatesAutoresizingMaskIntoConstraints = false
view.addSubview(stackView)
stackView.centerYAnchor.constraintEqualToAnchor(view.centerYAnchor).active = true
//initialize stackView labels
var labelIndex = 0
for label in stackViewLabels {
label.text = "Label \(labelIndex++)"
}
//initialize tap count label
tapCountLabel.numberOfLines = 3
tapCountLabel.lineBreakMode = .ByWordWrapping
view.addSubview(tapCountLabel)
updateTapCount()
}
//this function is called each time the screen is tapped
func reloadStackView() {
for view in stackView.arrangedSubviews {
stackView.removeArrangedSubview(view)
view.removeFromSuperview()
}
for label in stackViewLabels {
stackView.addArrangedSubview(label)
}
updateTapCount()
}
//for updating the number of screen taps:
let tapCountLabel = UILabel(frame: CGRectMake(0, 30, 400, 90))
var screenTapCount = 0
func updateTapCount() {
tapCountLabel.text = "Tap Count: \(screenTapCount++)\nstackView.spacing: \(stackView.spacing)\n(tap the screen to reload the stackview)"
}
}