Swift-如何在水平堆叠视图中设置可变数量按钮之间的间距?
我正在使用一个水平Swift-如何在水平堆叠视图中设置可变数量按钮之间的间距?,swift,autolayout,nslayoutconstraint,uistackview,Swift,Autolayout,Nslayoutconstraint,Uistackview,我正在使用一个水平UIStackView,它最多可以包含3个UIButtons。(可以是1、2或3) 我想让它们居中,它们之间有相同的空间,就像这样: 我好像没办法把这事办好。。。我尝试了分发和对齐的每一种组合,但都做不好 以下是stackView的约束条件: fileprivate func setupStackViewConstraints() { stackView.translatesAutoresizingMaskIntoConstraints = false
UIStackView
,它最多可以包含3个UIButton
s。(可以是1、2或3)
我想让它们居中,它们之间有相同的空间,就像这样:
我好像没办法把这事办好。。。我尝试了分发
和对齐
的每一种组合,但都做不好
以下是stackView
的约束条件:
fileprivate func setupStackViewConstraints() {
stackView.translatesAutoresizingMaskIntoConstraints = false
NSLayoutConstraint.activate([
stackView.topAnchor.constraint(equalToConstant: 60),
stackView.leadingAnchor.constraint(equalTo: self.view.leadingAnchor),
stackView.trailingAnchor.constraint(equalTo: self.view.trailingAnchor),
stackView.bottomAnchor.constraint(equalTo: self.view.bottomAnchor)
])
}
fileprivate func setupFacebookButton() {
let facebookButton = UIButton()
facebookButton.setImage(UIImage(named: "facebookSocialIcon"), for: .normal)
facebookButton.imageView?.contentMode = .scaleAspectFit
facebookButton.addTarget(self, action: #selector(facebookButtonWasTapped), for: .touchUpInside)
// -----------------------------------
facebookButton.translatesAutoresizingMaskIntoConstraints = false
NSLayoutConstraint.activate([
facebookButton.widthAnchor.constraint(equalToConstant: 40),
facebookButton.heightAnchor.constraint(equalToConstant: 40)
])
// -----------------------------------
stackView.addArrangedSubview(facebookButton)
}
以下是按钮的限制条件:
fileprivate func setupStackViewConstraints() {
stackView.translatesAutoresizingMaskIntoConstraints = false
NSLayoutConstraint.activate([
stackView.topAnchor.constraint(equalToConstant: 60),
stackView.leadingAnchor.constraint(equalTo: self.view.leadingAnchor),
stackView.trailingAnchor.constraint(equalTo: self.view.trailingAnchor),
stackView.bottomAnchor.constraint(equalTo: self.view.bottomAnchor)
])
}
fileprivate func setupFacebookButton() {
let facebookButton = UIButton()
facebookButton.setImage(UIImage(named: "facebookSocialIcon"), for: .normal)
facebookButton.imageView?.contentMode = .scaleAspectFit
facebookButton.addTarget(self, action: #selector(facebookButtonWasTapped), for: .touchUpInside)
// -----------------------------------
facebookButton.translatesAutoresizingMaskIntoConstraints = false
NSLayoutConstraint.activate([
facebookButton.widthAnchor.constraint(equalToConstant: 40),
facebookButton.heightAnchor.constraint(equalToConstant: 40)
])
// -----------------------------------
stackView.addArrangedSubview(facebookButton)
}
有什么想法吗?尝试将StackView仅限制在x和y中心(而不是限制其前导和尾随锚定): 然后,可以将分布值保留为默认值,并将间距值设置为所需值:
stackView.spacing = // 16px
这样,StackView的宽度将等于内容宽度。尝试仅将StackView约束为中心x和y(而不是约束其前导和尾随锚定): 然后,可以将分布值保留为默认值,并将间距值设置为所需值:
stackView.spacing = // 16px
这样,StackView的宽度将等于内容宽度。这里的分布和对齐是显而易见的。您需要“等间距”和“中心”。您还应该设置合适的
间距
“硬位”是如何使排列的视图在中间水平对齐的,因为<代码>对齐< /代码>属性仅与垂直于<代码>轴< /代码>对齐。
关键是让堆栈视图具有灵活的宽度,并在中心水平对齐。这意味着删除前导约束和尾随约束,并添加中心X约束 因此,以下是堆栈视图上的约束:NSLayoutConstraint.activate([
stackView.topAnchor.constraint(equalToConstant: 60),
stackView.centerXAnchor.constraint(equalTo: view.centerXAnchor),
stackView.bottomAnchor.constraint(equalTo: self.view.bottomAnchor)
])
请注意,堆栈视图将扩展其宽度以适应其中所有排列的子视图。这意味着,如果排列的子视图过多,其中一些可能会脱离屏幕。如果你想让它们“打包”到下一行,考虑使用<代码> uICLoopDebug视图>代码>:( 这里的分布和对齐是显而易见的。您需要“等间距”和“中心”。您还应该设置合适的
间距
“硬位”是如何使排列的视图在中间水平对齐的,因为<代码>对齐< /代码>属性仅与垂直于<代码>轴< /代码>对齐。
关键是让堆栈视图具有灵活的宽度,并在中心水平对齐。这意味着删除前导约束和尾随约束,并添加中心X约束 因此,以下是堆栈视图上的约束:NSLayoutConstraint.activate([
stackView.topAnchor.constraint(equalToConstant: 60),
stackView.centerXAnchor.constraint(equalTo: view.centerXAnchor),
stackView.bottomAnchor.constraint(equalTo: self.view.bottomAnchor)
])
请注意,堆栈视图将扩展其宽度以适应其中所有排列的子视图。这意味着,如果排列的子视图过多,其中一些可能会脱离屏幕。如果您希望它们“打包”到下一行,请考虑使用<代码> uICLoopDebug视图> />代码>:(<)/P>