隐藏stackView时打破约束

时间:2020-03-25 09:57:57

标签: ios swift uicollectionview constraints uistackview

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

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

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

从print()中可以看到,该方法首先执行,然后执行sizeForItemAt。为什么当我在stackView.hidden = true中设置cellForItemAt并且出现文本消息(然后在sizeForItemAt中提高文本消息的高度)时,却打破了隐藏的stackView的约束?

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

1 个答案:

答案 0 :(得分:0)

设置元素.isHidden = true不会 删除与该元素相关的所有约束。

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

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

2)向要隐藏的对象上方添加一个附加的垂直空间约束。为约束赋予不同的优先级,并在想要显示或隐藏相关对象时更改优先级。这是一个执行此操作的示例:https://stackoverflow.com/a/60817954/6257435