UIStackView 拉伸子视图对齐它

UIStackView stretching out sub view aligning it

我正在尝试以编程方式布置 StackView,我想要实现的效果是

但我得到的是

我不明白为什么 loadingDotView 会拉伸以填满所有 space?

   let loadingDotView: UIView = {
        let ldv = UIView()
        ldv.backgroundColor = .white
        ldv.alpha = 0
        ldv.frame = CGRect(x: 0, y: 0, width: 20, height: 20)
        ldv.layer.cornerRadius = 10
        ldv.layer.masksToBounds = true
        ldv.translatesAutoresizingMaskIntoConstraints = false
        return ldv
    }()

    let dotsStackView: UIStackView = {
        let stackView = UIStackView()
        stackView.axis = .horizontal
        stackView.distribution = .equalSpacing
        stackView.translatesAutoresizingMaskIntoConstraints = false
        return stackView
    }()

设置代码...

   view.addSubview(dotsStackView)

    
    
    NSLayoutConstraint.activate([
            dotsStackView.heightAnchor.constraint(equalToConstant: 20),
            dotsStackView.widthAnchor.constraint(equalToConstant: 100),
            dotsStackView.centerXAnchor.constraint(equalTo: view.centerXAnchor),
            dotsStackView.centerYAnchor.constraint(equalTo: view.centerYAnchor)
        ])
    
    

    dotsStackView.addArrangedSubview(loadingDotView)
    dotsStackView.addArrangedSubview(loadingDotView)
    dotsStackView.addArrangedSubview(loadingDotView)

这个(关闭)

let loadingDotView: UIView = {
    let ldv = UIView()
    ldv.backgroundColor = .white
    ldv.alpha = 0
    ldv.frame = CGRect(x: 0, y: 0, width: 20, height: 20)
    ldv.layer.cornerRadius = 10
    ldv.layer.masksToBounds = true
    ldv.translatesAutoresizingMaskIntoConstraints = false
    return ldv
}()

returns 相同的对象每次访问所以只出现一个,使其(计算 属性 )每次访问都创建一个新对象

var loadingDotView: UIView {
    let ldv = UIView()
    ldv.backgroundColor = .white
    ldv.alpha = 0
    ldv.frame = CGRect(x: 0, y: 0, width: 20, height: 20)
    ldv.layer.cornerRadius = 10
    ldv.layer.masksToBounds = true
    ldv.translatesAutoresizingMaskIntoConstraints = false
    return ldv
}

并添加

stackView.spacing = 20
stackView.distribution = .fillEqually