我有一个水平UIStackView
,默认情况下,如下所示:
最初隐藏带有心脏的视图,然后在运行时显示。我想减少心脏视图和帐户名称视图之间的间距
以下代码执行此任务,但在viewDidLoad
中执行时仅:
stackView.setCustomSpacing(8, after: heartView)
稍后更改自定义间距时,例如按下按钮,它没有任何效果。现在,这里的问题是,一旦堆栈视图中的子视图发生变化,自定义间距就会丢失:当从堆栈视图中取消/隐藏视图时,自定义间距将被重置并且无法修改。
stackView.customSpacing(after: heartView)
(正确返回8
)stackView.layoutIfNeeded()
stackView.layoutSubviews()
view.layoutIfNeeded()
view.layoutSubviews()
viewDidLayoutSubviews()
如何在运行时更新堆栈视图的自定义间距?
答案 0 :(得分:6)
您需要确保UIStackView
的{{1}}属性设置为distribution
或.fill
。
我创建了以下swift操场,看起来我能够在运行时使用.fillProportionally
随机值并查看其效果。
setCustomSpacing
答案 1 :(得分:2)
setCustomSpacing
可能失败的另一个原因是,如果您在添加之前的 前添加了排列后的子视图,然后再应用间距。
不起作用:
headerStackView.setCustomSpacing(50, after: myLabel)
headerStackView.addArrangedSubview(myLabel)
会工作:
headerStackView.addArrangedSubview(myLabel)
headerStackView.setCustomSpacing(50, after: myLabel)