隐藏stackView时打破约束

Posted

技术标签:

【中文标题】隐藏stackView时打破约束【英文标题】:Breaking constraints when the stackView is hidden 【发布时间】:2020-03-25 09:57:57 【问题描述】:

我正在使用 collectionView 作为聊天框。有一个代码可以检测是否有附件并通过

更改 collectionViewCell 的高度
(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath

cellForItemAt中,我显示或隐藏stackView,取决于它是否是文件。

正如我从 print() 中看到的,这个方法首先执行,然后是 sizeForItemAt。为什么当我在cellForItemAt 中设置stackView.hidden = true 并且是短信(然后在sizeForItemAt 中我为短信设置高度)时,会打破隐藏stackView 的约束?

当 stackView 被隐藏时,如何打破约束?基本上没有逻辑……

【问题讨论】:

【参考方案1】:

设置元素.isHidden = true 确实不会删除与该元素相关的任何约束。

对于任何 UI 对象(不仅仅是堆栈视图),如果您希望在隐藏时移除其“空间”,您有几个选择。

1) 将它和其他对象嵌入到堆栈视图中(是的,您可以将堆栈视图嵌入到另一个堆栈视图中)。隐藏排列的子视图时,堆栈视图会自动删除空间。

2) 为您要隐藏的对象上方添加一个额外的垂直空间约束。为约束赋予不同的优先级,并在您想要显示或隐藏相关对象时更改优先级。下面是一个例子:https://***.com/a/60817954/6257435

【讨论】:

以上是关于隐藏stackView时打破约束的主要内容,如果未能解决你的问题,请参考以下文章