【发布时间】:2018-10-04 10:07:30
【问题描述】:
要求:
我们的应用程序有一个模式,其中许多屏幕在顶部有许多 UILabel,在它们下面有一个 UITableView,当它出现时,它始终是页面上的最后一个元素,并向右扩展到屏幕底部。因为页面依赖于用户特定的数据,所以我们不知道需要显示多少标签。另外,在某些情况下,当 UITableView 中没有要显示的数据时,我们只是想隐藏它。
我的实现(不起作用):
由于页面的动态特性,我认为将所有 UILabel 和 UITableView 包装在 UIStackView 中,然后在代码中操作元素的可见性(即 isHidden 属性)是可行的方法。我将 UIStackView 的所有角都固定到 SuperView 的角上,除了底部约束,我将其设置为大于或等于 UIStackView 底部约束。这样做是为了确保在 UITableView 被隐藏的情况下,UIStackView 不会占用整个屏幕,因为它倾向于在屏幕中间显示标签。基本上如果 UITableView 是可见的,我希望 UIStackView 占据整个页面,否则,只是显示标签所需的空间。
问题:
AutoLayout 无法确定 UITableView 的高度。我可以想到两种解决方案:
- 将 UIStackView 底部常量更改为“等于”而不是“大于或等于”。然而,这种方式 UIStackView 将始终占据整个屏幕高度,而不是当 UITableView 隐藏时我想要的。
- 手动指定UITableView的高度约束。我不想这样做,因为我不知道从 TableView 顶部到屏幕底部所需的高度。我认为这在代码中并不太难,但我希望有一个更优雅的解决方案。
有趣的观察:
与 UITableView 不同,UILabels 似乎没有与 UITableView 相同的高度限制问题。我不是 100% 确定这是为什么,但我的猜测是 UILabel 事先知道它们的高度(可能通过 intrinsicContentSize()),但 UITableView 直到运行时才知道?
【问题讨论】:
标签: ios uitableview autolayout uistackview