隐藏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时打破约束的主要内容,如果未能解决你的问题,请参考以下文章
如果设置隐藏,iOS UIStackView 无法同时满足约束
当 trait 集合发生变化时,就会出现约束冲突,就好像 stackview 轴没有改变一样
StackView 在 Button 被隐藏时为 Button 上浆