运行时UIStackView setCustomSpacing

时间:2018-03-15 17:56:26

标签: swift uistackview

我有一个水平UIStackView,默认情况下,如下所示:

default stack view

最初隐藏带有心脏的视图,然后在运行时显示。我想减少心脏视图和帐户名称视图之间的间距 以下代码执行此任务,但在viewDidLoad中执行时

stackView.setCustomSpacing(8, after: heartView)

稍后更改自定义间距时,例如按下按钮,它没有任何效果。现在,这里的问题是,一旦堆栈视图中的子视图发生变化,自定义间距就会丢失:当从堆栈视图中取消/隐藏视图时,自定义间距将被重置并且无法修改。

事情,我试过了:

  • 验证了间距是通过打印stackView.customSpacing(after: heartView)(正确返回8
  • 来设置的
  • 未成功运行多个重装功能:
    • stackView.layoutIfNeeded()
    • stackView.layoutSubviews()
    • view.layoutIfNeeded()
    • view.layoutSubviews()
    • viewDidLayoutSubviews()

如何在运行时更新堆栈视图的自定义间距?

2 个答案:

答案 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)