簡體   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