簡體   English   中英

UITableViewCell內部的UITableView的動態行高

[英]Dynamic row heights of a UITableView inside a UITableViewCell

我有一個“主” UITableView,其中使用了從.xib加載的不同單元格。 其中一些單元格本身也具有UITableView。

現在,我已經將每個單元格的行高設置為原始xib大小。 但是,我想使高度動態變化,並與“子” UITableView中的行數相對應。

我遇到以下問題:

  • 加載ViewController后,主UITableView需要為其具有的每個單元格都具有一個高度。
  • 到需要此高度時,子UITableView尚未加載其自己的單元格,因此還不是適當的大小。

我嘗試了以下方法:

  • 首先,以“估計”高度加載單元格
  • 單元加載其自己的tableView並調用以刷新主tableView

但是,在這種情況下,單元格將使用“估計的”高度來布置自己的行。 因此,它總是太大或太小。

我該如何解決這個問題?

第一種方法:

  1. 為子tableView創建一個子類,並覆蓋internalContentSize。

      class MyOwnTableView: UITableView { override var intrinsicContentSize: CGSize { self.layoutIfNeeded() return self.contentSize } override var contentSize: CGSize { didSet{ self.invalidateIntrinsicContentSize() } } override func reloadData() { super.reloadData() self.invalidateIntrinsicContentSize() } } 
  2. 在“界面”構建器中,將子tableView的類更改為MyOwnTableView(子類UITableView)。

  3. 設置父表和子表視圖的自動行高。

      tableView.estimatedRowHeight = 60.0; tableView.rowHeight = UITableViewAutomaticDimension; 

第二種方法: 1.為子tableView創建一個具有任何值的高度約束,並連接設置子tableView高度的IBOutlet。 2.將高度約束的常量設置為tableView.contentSize.height

    self.tableViewHeight.constant = self.tableView.contentSize.height

您可以創建一個對象,該對象將創建要放入單元格的類的模板對象,在其中放入數據,計算其大小,然后將其返回到master tableView的sizeForItem方法上。 這樣,當主tableView准備數據時,您將能夠為項目設置返回的計算大小。
這就是我在項目中做到的方式。
您可以使用緩存來改進此對象,使其通用並在需要時使用。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM