【发布时间】:2016-07-21 09:41:24
【问题描述】:
当horizontalSizeClass 更改时显示/隐藏arrangedSubviews 时,我在自定义UITableViewCell 中的水平UIStackView 出现布局问题。
我的堆栈视图包含许多子视图,每个子视图取决于单元格配置和大小类别,要么是hidden,要么显示。 UIStackView 旨在处理排列显示的视图,但在旋转时会出现布局问题。
问题:
- 有时,适当的子视图要么不显示,要么不应该隐藏。
- 有时,子视图布局不当,未填满堆栈视图的宽度。
尝试:
我尝试了很多方法来解决布局问题:
- 覆盖
viewWillTransitionToSize:transitionCoordinator以重新加载表格和/或强制布局 - 覆盖
viewWillTransitionToTraitCollection:withTransitionCoordinator以重新加载表格和/或强制布局 - 覆盖
layoutSubviews以重新配置堆栈视图的arrangedSubviews - 配置单元后调用
[self setNeedsLayout]、[self layoutIfNeeded] - 在其他地方强制布局
- 将子视图布局约束优先级更改为 999
- 将
UILabels 限制为1 行,并设置preferredMaxLayoutWidth - 调整视图上的
contentCompressionResistance和contentHuggingPriority - 为
rowHeight使用静态值而不是UITableViewAutomaticDimension - 等
似乎无法解决这些问题。
此外,即使单元格在屏幕上滚动关闭/滚动,准备重用并重新配置,问题仍然存在、消失或引入新问题,尽管我正确地重置了 @ 上的单元格987654344@.
示例项目
我创建了一个示例项目来说明布局问题。在这一点上,我不确定UIStackView 是否有问题或者我是否在滥用它。
示例项目:https://github.com/bradgmueller/StackViewTest
示例项目使用自定义 UITableViewCell,并在 xib 中配置视图。使用不同的配置生成行对象,以说明单元格应采用的动态布局:
- 缩进/不缩进
- 是否显示分隔符
- 显示/隐藏“赞”按钮
- 显示/隐藏“分享”按钮
- 显示/隐藏信息按钮,其中一个信息按钮用于
UIUserInterfaceSizeClassCompact,另一个用于UIUserInterfaceSizeClassRegular
存在一个文本标签,其中包含指示应显示哪些视图的文本,以帮助说明何时不适当地显示/隐藏视图。此外,UIStackView 后面还有一个红色背景视图,用于说明堆栈视图何时无法填充宽度。
截图:
如果有任何见解,我将不胜感激,在此先感谢!
【问题讨论】:
标签: ios uitableview layout size-classes uistackview