我有一个水平的UIStackView
,默认情况下如下所示:
心脏视图最初是隐藏的,然后在运行时显示。我想减少心脏视图和帐户名称视图之间的间距。
下面的代码完成了这项工作,但 * 仅 * 在viewDidLoad
中执行:
stackView.setCustomSpacing(8, after: heartView)
当以后更改自定义间距时,比如按下按钮,它不会有任何影响。现在,问题是,一旦堆栈视图中的子视图更改,自定义间距就会丢失:当从堆栈视图中取消/隐藏视图时,自定义间距被重置并且不能被修改。
的事情,我已经尝试:
- 已验证是否通过打印
stackView.customSpacing(after: heartView)
(正确返回8
)设置间距 - 未成功运行多个重新加载功能:
stackView.layoutIfNeeded()
stackView.layoutSubviews()
view.layoutIfNeeded()
view.layoutSubviews()
viewDidLayoutSubviews()
如何在运行时更新堆栈视图的自定义间距?
3条答案
按热度按时间ejk8hzay1#
您需要确保
UIStackView
的distribution
属性设置为.fill
或.fillProportionally
。我创建了下面的swift playground,看起来我可以在运行时将
setCustomSpacing
与随机值一起使用,并看到效果。ui7jx7zq2#
setCustomSpacing
可能失败的另一个原因是,如果将其称为“在添加要应用间距的已排列子视图之前”。行不通:
将工作:
xlpyo6sf3#
我还注意到自定义间距值在隐藏/取消隐藏子视图后会被重置。我能够覆盖父视图的
updateConstraints()
并根据需要设置自定义间距。视图然后保持它们预期的间距。