【问题标题】:UITableView inside a UIStackView height constraint issueUIStackView 高度约束问题中的 UITableView
【发布时间】:2018-10-04 10:07:30
【问题描述】:

要求:

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

我的实现(不起作用):

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

问题:

AutoLayout 无法确定 UITableView 的高度。我可以想到两种解决方案:

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

有趣的观察:

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

【问题讨论】:

    标签: ios uitableview autolayout uistackview


    【解决方案1】:

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

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

    您需要在加载数据时update constraints 根据收到的数据设置值。

    【讨论】:

    • 谢谢艾伦,这可能是我最终会做的,直到我找到更好的解决方案。我们的应用程序有很多页面都带有这种 UI,所以如果我能找到一些不涉及根据数据手动更改约束的通用解决方案,那就太好了。
    猜你喜欢
    • 1970-01-01
    • 2017-09-27
    • 2016-06-14
    • 1970-01-01
    • 2023-03-17
    • 2017-11-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多