我们的应用程序具有一种模式,其中许多屏幕的顶部都具有多个UILabel,并且在其下方具有单个UITableView,该UILabel在出现时始终是页面上的最后一个元素,并一直扩展到屏幕底部。由于页面取决于特定于用户的数据,因此我们不预先知道需要显示多少标签。而且,在某些情况下,当UITableView中没有要显示的数据时,我们只想隐藏它即可。
由于页面的动态性质,我认为将所有UILabel和UITableView包装在UIStackView中,然后在代码中操纵元素可见性(即isHidden属性)是可行的方法。我将UIStackView的所有角落固定到了SuperView的角落,除了底部约束,我使底部约束大于或等于UIStackView底部约束。这样做是为了确保在UITableView隐藏的情况下,UIStackView不会占据整个屏幕,因为这样做时,它倾向于将标签显示在屏幕中间。基本上,如果UITableView是可见的,则我希望UIStackView占据整个页面,否则,仅是显示标签所需的空间。
AutoLayout在计算UITableView的高度时遇到问题。我可以想到两种解决方案:
与UITableView不同,UILabel在高度限制方面似乎没有与UITableView相同的问题。我不是100%知道为什么会这样,但是我的猜测是UILabel提前知道了它们的高度(可能是通过internalContentSize()知道的),但是UITableView直到运行时才知道吗?
答案 0 :(得分:1)
您可以结合建议的解决方案1和2:
将StackView底部约束设置为“等于”,然后以编程方式将其更改为“大于或等于”。
加载数据时,您需要update constraints才能根据接收到的数据设置值。