繁体   English   中英

UIStackView 高度约束问题内的 UITableView

[英]UITableView inside a UIStackView height constraint issue

要求:

我们的应用程序有一个模式,其中许多屏幕在顶部有许多 UILabels,在它们下面有一个 UITableView,当存在时,它始终是页面上的最后一个元素并扩展到屏幕底部。 因为页面依赖于用户特定的数据,所以我们不知道需要显示多少标签。 此外,在某些情况下,当 UITableView 中没有要显示的数据时,我们只是想隐藏它。

我的实现(不起作用):

由于页面的动态特性,我认为将所有 UILabels 和 UITableView 包装在 UIStackView 中,然后在代码中操作元素可见性(即 isHidden 属性)是要走的路。 我将 UIStackView 的所有角固定到 SuperView 的角上,除了底部约束,我使底部约束大于或等于 UIStackView 底部约束。 这样做是为了确保在 UITableView 被隐藏的情况下,UIStackView 不会占据整个屏幕,因为这样做时它倾向于在屏幕中间显示标签。 基本上,如果 UITableView 可见,我希望 UIStackView 占据整个页面,否则,只需要显示标签所需的空间。

问题:

演示问题的示例应用程序 高度限制问题

AutoLayout 在确定 UITableView 的高度时有问题。 我可以想到两种解决方案:

  1. 将 UIStackView 底部常量更改为“等于”而不是“大于或等于”。 然而,这种方式 UIStackView 将始终采用整个屏幕高度,而不是当 UITableView 隐藏时我想要的。
  2. 手动指定 UITableView 的高度约束。 我不想这样做,因为我不知道从 TableView 顶部到屏幕底部所需的高度是多少。 我认为这在代码中并不太难,但我希望有一个更优雅的解决方案。

有趣的观察:

与 UITableView 不同,UILabels 似乎没有与 UITableView 相同的高度限制问题。 我不是 100% 确定这是为什么,但我的猜测是 UILabels 提前知道它们的高度(可能通过 internalContentSize())但 UITableView 直到运行时才知道?

您可以结合您提出的解决方案 1 和 2:

将 StackView 底部约束设置为“相等”,然后如果它为空,则以编程方式将其更改回“大于或等于”。

您需要在数据加载时更新约束以根据收到的数据设置值。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM