gpt4 book ai didi

ios - 在 UITableViewCell 中更改大小类时 UIStackView 布局问题

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:01:30 27 4
gpt4 key购买 nike

UIStackView 更改时显示/隐藏 UITableViewCell 时,自定义 arrangedSubviews 中的水平 horizontalSizeClass 出现布局问题。

我的堆栈 View 包含许多 subview ,根据单元格配置和大小类别,每个 subview 要么是 hidden,要么是显示的。 UIStackView 旨在处理显示 View 的排列,但在旋转时会出现布局问题。

问题:

  • 有时,适当的 subview 在应该显示的时候没有显示或没有隐藏。
  • 有时, subview 布局不当,没有填满堆栈 View 的宽度。

尝试:

我尝试了很多方法来解决布局问题:

  • 覆盖 viewWillTransitionToSize:transitionCoordinator 以重新加载表格和/或强制布局
  • 覆盖 viewWillTransitionToTraitCollection:withTransitionCoordinator 以重新加载表格和/或强制布局
  • 覆盖 layoutSubviews 以重新配置堆栈 View 的 arrangedSubviews
  • 配置单元后调用 [self setNeedsLayout] , [self layoutIfNeeded]
  • 在其他地方强制布局
  • 将 subview 布局约束优先级更改为 999
  • UILabel 限制为 1 行,并设置一个 preferredMaxLayoutWidth
  • 在 View 上调整 contentCompressionResistancecontentHuggingPriority
  • 使用静态值 rowHeight 而不是 UITableViewAutomaticDimension
  • 等等

似乎没有什么可以解决问题。

此外,即使单元格在屏幕上滚动/关闭、准备重用和重新配置时,问题仍然存在、消失或引入新问题,尽管我在 prepareForReuse 上正确重置了单元格.


示例项目

我创建了一个示例项目来说明布局问题。在这一点上,我不确定 UIStackView 是有问题还是我滥用了它。

示例项目:https://github.com/bradgmueller/StackViewTest

示例项目使用自定义 UITableViewCell,并在 xib 中配置了 View 。生成具有不同配置的行对象以说明单元格应采用的动态布局:

  • 缩进/不缩进
  • 是否显示分隔符
  • 显示/隐藏“赞”按钮
  • 显示/隐藏“分享”按钮
  • 显示/隐藏一个信息按钮,其中一个信息按钮用于 UIUserInterfaceSizeClassCompact,另一个用于 UIUserInterfaceSizeClassRegular

存在一个文本标签,其中包含指示应显示哪些 View 的文本,以帮助说明何时不恰本地显示/隐藏了 View 。此外,UIStackView 后面存在一个红色背景 View ,以说明堆栈 View 何时无法填充宽度。

截图:

初始布局 - 没有问题 Initial layout - no issues

旋转后 - 标有红色“X”的问题 Rotation - issues arise


如果有任何见解,我将不胜感激!

最佳答案

通常堆栈 View 都很好,但是当它们变得更复杂并管理更多 View 时,它们似乎不太可靠。

我发现避免布局问题的最好方法是做一两件事:

  1. 使用多个堆栈 View 。与其将我的所有 View 集中到同一个堆栈 View 中,不如拥有多个较小的堆栈 View 似乎更可靠,因为每个 View 管理的 View 更少。
  2. 删除/重新插入 View ,而不是隐藏它们。尽管堆栈 View 应该将“隐藏” View 视为已从层次结构中删除,但当我实际将它们从层次结构中删除时,我得到了更好的布局结果。

例如:

更可靠的布局结果:

if (hideSubview == YES) {
[subview removeFromSuperview];
} else {
[stackView insertArrangedSubview:subview atIndex:0];
}

不太可靠:

subview.hidden = hideSubview;

关于ios - 在 UITableViewCell 中更改大小类时 UIStackView 布局问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36358760/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com