我正在使用collectionView作为聊天框。有一个代码可以检测是否有附件,并通过
来更改collectionViewCell的高度(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath
在 cellForItemAt 中,我显示或隐藏stackView,取决于它是否是文件。
从print()中可以看到,该方法首先执行,然后执行sizeForItemAt
。为什么当我在stackView.hidden = true
中设置cellForItemAt
并且出现文本消息(然后在sizeForItemAt
中提高文本消息的高度)时,却打破了隐藏的stackView的约束?
当stackView隐藏时,如何打破约束?基本上没有逻辑。...
答案 0 :(得分:0)
设置元素.isHidden = true
不会 不 删除与该元素相关的所有约束。
对于任何UI对象(不仅仅是堆栈视图),如果要在隐藏时删除其“空间”,则有几个选择。
1)将其和其他对象嵌入堆栈视图中(是的,您可以将堆栈视图嵌入另一个堆栈视图中)。隐藏已安排的子视图时,堆栈视图会自动删除空间。
2)向要隐藏的对象上方添加一个附加的垂直空间约束。为约束赋予不同的优先级,并在想要显示或隐藏相关对象时更改优先级。这是一个执行此操作的示例:https://stackoverflow.com/a/60817954/6257435