Swift 嵌套堆栈视图:以编程方式附加时,子堆栈视图不在其父堆栈视图内

Swift 嵌套堆栈视图:以编程方式附加时,子堆栈视图不在其父堆栈视图内,swift,autolayout,uistackview,Swift,Autolayout,Uistackview,我试图实现嵌套堆栈视图,其中一个堆栈视图位于另一个堆栈视图中。我已经基于我的代码。我现在的代码在下面 @IBOutlet weak var verticalStackView: UIStackView! let blueImageView = UIImageView() blueImageView.backgroundColor = UIColor.blueColor() blueImageView.image = UIImage(named: "just some image") blueIm

我试图实现嵌套堆栈视图,其中一个堆栈视图位于另一个堆栈视图中。我已经基于我的代码。我现在的代码在下面

@IBOutlet weak var verticalStackView: UIStackView!
let blueImageView = UIImageView()
blueImageView.backgroundColor = UIColor.blueColor()
blueImageView.image = UIImage(named: "just some image")
blueImageView.snp_makeConstraints { (make) in
  make.height.width.equalTo(34)
}

let greenImageView = UIImageView()
greenImageView.backgroundColor = UIColor.greenColor()
greenImageView.image = UIImage(named: "just some image")
// This is just from SnapKit
greenImageView.snp_makeConstraints { (make) in
  make.height.width.equalTo(34)
}

let stackView = UIStackView()
stackView.axis = UILayoutConstraintAxis.Horizontal
stackView.distribution = UIStackViewDistribution.EqualSpacing
stackView.alignment = UIStackViewAlignment.Center
stackView.spacing = 16.0
stackView.addArrangedSubview(blueImageView)
stackView.addArrangedSubview(greenImageView)
stackView.translatesAutoresizingMaskIntoConstraints = false;
// This is just from SnapKit
verticalStackView.snp_makeConstraints { (make) in
  make.height.equalTo(70)
}
verticalStackView.addSubview(stackView)
当我试着跑步时,它看起来是这样的

如您所见,子堆栈视图
stackView
位于层次结构中父堆栈视图(
verticalStackView
)的下方。但定位是错误的

我对Swift、AutoLayout和stackview很新。有人能帮我指出我遗漏了什么吗


谢谢

所以我在读了一些书之后找到了解决办法

@IBOutlet weak var verticalStackView: UIStackView!
let blueImageView = UIImageView()
blueImageView.backgroundColor = UIColor.blueColor()
blueImageView.image = UIImage(named: "buttonFollowCheckGreen")
blueImageView.snp_makeConstraints { (make) in
  make.height.width.equalTo(34)
}

let greenImageView = UIImageView()
greenImageView.backgroundColor = UIColor.greenColor()
greenImageView.image = UIImage(named: "buttonFollowCheckGreen")
greenImageView.snp_makeConstraints { (make) in
  make.height.width.equalTo(34)
}

let firstLineStackView = UIStackView()
firstLineStackView.axis = UILayoutConstraintAxis.Horizontal
firstLineStackView.distribution = UIStackViewDistribution.Fill
firstLineStackView.alignment = UIStackViewAlignment.Center
firstLineStackView.spacing = 8.0

firstLineStackView.addArrangedSubview(blueImageView)
firstLineStackView.addArrangedSubview(greenImageView)
firstLineStackView.translatesAutoresizingMaskIntoConstraints = false;

let redImageView = UIImageView()
redImageView.backgroundColor = UIColor.redColor()
redImageView.image = UIImage(named: "buttonFollowCheckGreen")
redImageView.snp_makeConstraints { (make) in
  make.height.width.equalTo(34)
}

verticalStackView.addArrangedSubview(firstLineStackView)

我只需要使用
addArrangedSubview
而不是
addSubview
,剩下的就让autolayout来完成。为了固定图像视图的位置和大小,我还修改了垂直堆栈视图的对齐方式,从填充改为引导 greenImageView.widthAnchor.constraint(equalToConstant:34)。isActive=true

这将得到解决