按钮 stackView 间距不起作用 -Swift - 以编程方式
button stackView spacing not working -Swift - Programmatically
我以这种方式在 viewcontroller 中添加一个 stackView:
addSubview(stackView)
stackView.translatesAutoresizingMaskIntoConstraints = false
stackView.anchor(top: nameLabel.bottomAnchor, leading: leadingAnchor, bottom: bottomAnchor, trailing: trailingAnchor)
let emotionsButton = EmotionButton()
emotionsButton.translatesAutoresizingMaskIntoConstraints = false
let contentButton = ContentsButton()
contentButton.translatesAutoresizingMaskIntoConstraints = false
stackView.axis = .horizontal
stackView.alignment = .center
stackView.distribution = .equalCentering
stackView.spacing = 8
stackView.addArrangedSubview(emotionsButton)
stackView.addArrangedSubview(contentButton)
emotionsButton.widthAnchor.constraint(equalToConstant: 91).isActive = true
contentButton.widthAnchor.constraint(equalToConstant: 91).isActive = true
emotionsButton.heightAnchor.constraint(equalToConstant: 83).isActive = true
contentButton.heightAnchor.constraint(equalToConstant: 83).isActive = true
但是我得到的结果不是我想要的;这就是我想要的:
这是我得到的:
如果你想在stackview上做它,你不需要相应地配置你的子视图(emotionsButton,contentButton)的heightAnchor或widthAnchor..你需要配置的只是[=的高度和宽度锚点13=]stackView,让它相应地调整你的子视图。
stackView.axis = .horizontal
stackView.alignment = .center
stackView.distribution = .equalCentering
stackView.spacing = 8
stackView.widthAnchor.constraint(equalToConstant: 91 * 2).isActive = true
stackView.heightAnchor.constraint(equalToConstant: 83).isActive = true
stackView.addArrangedSubview(emotionsButton)
stackView.addArrangedSubview(contentButton)
UIStackView
尝试用其内容填充整个宽度。所以你在这里有一些选择
居中
由于 stackView 的内容大小基于其内容,您应该考虑摆脱 leading
和 trailing
锚点并改用水平居中。 (您可以将其中一个与中间的一个并排放置,以防止其与边缘重叠)
虚拟观看次数
另一个选项是添加。堆栈视图(内部)两侧的虚拟视图,使它们具有 clear
颜色,并让它们成为最后一个拥抱。所以。他们。能够。额外填写 space.
其他选项
您可以实施其他选项(例如根本不使用堆栈视图)来实现它。
将内容拥抱优先级更改为 .required
可能有效。
stackView.setContentHuggingPriority(.required, for: .horizontal)
如果您在添加 stackview 之后添加 arrangedSubViews。添加新的 arrangedSubviews 后尝试设置间距。
我以这种方式在 viewcontroller 中添加一个 stackView:
addSubview(stackView)
stackView.translatesAutoresizingMaskIntoConstraints = false
stackView.anchor(top: nameLabel.bottomAnchor, leading: leadingAnchor, bottom: bottomAnchor, trailing: trailingAnchor)
let emotionsButton = EmotionButton()
emotionsButton.translatesAutoresizingMaskIntoConstraints = false
let contentButton = ContentsButton()
contentButton.translatesAutoresizingMaskIntoConstraints = false
stackView.axis = .horizontal
stackView.alignment = .center
stackView.distribution = .equalCentering
stackView.spacing = 8
stackView.addArrangedSubview(emotionsButton)
stackView.addArrangedSubview(contentButton)
emotionsButton.widthAnchor.constraint(equalToConstant: 91).isActive = true
contentButton.widthAnchor.constraint(equalToConstant: 91).isActive = true
emotionsButton.heightAnchor.constraint(equalToConstant: 83).isActive = true
contentButton.heightAnchor.constraint(equalToConstant: 83).isActive = true
但是我得到的结果不是我想要的;这就是我想要的:
这是我得到的:
如果你想在stackview上做它,你不需要相应地配置你的子视图(emotionsButton,contentButton)的heightAnchor或widthAnchor..你需要配置的只是[=的高度和宽度锚点13=]stackView,让它相应地调整你的子视图。
stackView.axis = .horizontal
stackView.alignment = .center
stackView.distribution = .equalCentering
stackView.spacing = 8
stackView.widthAnchor.constraint(equalToConstant: 91 * 2).isActive = true
stackView.heightAnchor.constraint(equalToConstant: 83).isActive = true
stackView.addArrangedSubview(emotionsButton)
stackView.addArrangedSubview(contentButton)
UIStackView
尝试用其内容填充整个宽度。所以你在这里有一些选择
居中
由于 stackView 的内容大小基于其内容,您应该考虑摆脱 leading
和 trailing
锚点并改用水平居中。 (您可以将其中一个与中间的一个并排放置,以防止其与边缘重叠)
虚拟观看次数
另一个选项是添加。堆栈视图(内部)两侧的虚拟视图,使它们具有 clear
颜色,并让它们成为最后一个拥抱。所以。他们。能够。额外填写 space.
其他选项
您可以实施其他选项(例如根本不使用堆栈视图)来实现它。
将内容拥抱优先级更改为 .required
可能有效。
stackView.setContentHuggingPriority(.required, for: .horizontal)
如果您在添加 stackview 之后添加 arrangedSubViews。添加新的 arrangedSubviews 后尝试设置间距。