2

オブジェクトに 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)"
    }
}
4

0 に答える 0