2016-01-27 17 views
7

我有一個UITableView(我們稱之爲tbl_A)在一個表格視圖單元格中,該單元格的高度是動態的,並由UITableViewAutomaticDimension設置。 tbl_A的細胞高度也是動態的,我知道tbl_A的數據不會太多。所以我想tbl_A是滾動禁用和它的frame.size等於它的內容大小。我試圖設置tbl_A的frame.size.height = tbl_A.contentSize.height,不幸的是,高度是錯誤的。如何使UITableView適合內容的尺寸

順便說一下,我不必使用UITableView來完成此任務。我只想要一種顯示所有數據的方式。有什麼建議麼?

這是我想達到的效果是: enter image description here

+0

我已想盡溶液我可以搜索。 @NicolasMiari我會很感激,如果你給我一些關鍵詞。 – Yon

+0

@yon你使用目標c還是swift? – gikygik

+0

@gikygik我用swift開發 – Yon

回答

0
  1. 對於你的情況,你也可以使用滾動視圖。
  2. 在這種滾動視圖,同時增加每個子單元通過將每個子單元的高度跟蹤每個子電池的(以作爲referenceHeight變量)
  3. 通過計算身高(referenceHeight)
-2

最後設置了滾動高度在你的情況的tableview是最好的解決方案,你可以使用不同的uitableviewcells和部分,並可以加載它在cellForRowAtIndexPath。

0

下面是找到tableView的內容大小的方法。

- (CGFloat)tableViewHeightOfTable:(UITableView *)table 
{ 
    [table layoutIfNeeded]; 
    return [table contentSize].height; 
} 

請確保您在重新加載如下代碼的表格後調用此方法。

[YourTable reloadData]; 
YourTable.frame.size.height = [self tableViewHeightOfTable:YourTable]; 
+0

我認爲這個'contentSize'是根據'estimatedRowHeight'計算出來的,並不準確。最後,我使用OAStackView作爲我的容器視圖。 – Yon

+0

您能詳細分享您的解決方案嗎?我正在爲同樣的問題而努力。你能解釋一下更詳細的信息嗎? – ARS

2

只要滾動鎖定,您可以使用下面的動態匹配的tableView的佈局:

let size = actionsViewController.view.systemLayoutSizeFittingSize(UILayoutFittingCompressedSize) 
    actionsViewController.view.frame.size = size 
    actionsViewController.preferredContentSize = size 

下面提出的方式有自動佈局計算高度爲您提供你根據你限制在傳遞一個大小的另一種方式可能是以下幾點:

CGFloat leftViewHeight = 0; 
    if (self.isExpanded) { 
     [self.lineItemLineNumberListTableViewController.tableView layoutIfNeeded]; 
     UITableView *tableView = self.lineItemLineNumberListTableViewController.tableView; 
     CGSize tableViewContentSize = tableView.contentSize; 
     leftViewHeight = tableViewContentSize.height; 
    } 

self.leftViewHeightConstraint.constant = leftViewHeight; 

我以前曾使用上述擴大與動態subv動態調整細胞在他們內部進行觀察。這會在重新加載tableView的內容之後,根據內容大小配置高度約束,以確保在調整大小之前加載內容。

0

1)添加到您的類參考約束:

var heightC: NSLayoutConstraint! 

2)禁用滾動,並添加高度約束:你的控制器

tableView.scrollEnabled = false 
heightC = tableView.autoSetDimension(.Height, toSize: 20) // using PureLayout library 

3)覆蓋viewDidLayoutSubviews:

override func viewDidLayoutSubviews() { 
    super.viewDidLayoutSubviews() 
    heightC.constant = tableView.contentSize.height 
} 

並將高度約束「常量」屬性設置爲tableview內容高度。

上的數據刷新(例如,當項目計數從0到更多的變化4))剛迫使主控制器視圖佈局:

view.setNeedsLayout() 
5

簡單;)

override var intrinsicContentSize: CGSize { 
    return contentSize 
} 
+0

? – ARS

+0

從文檔:'設置此屬性允許自定義視圖與佈局系統通信基於其內容的尺寸。'https://developer.apple.com/documentation/uikit/uiview/1622600- intrinsiccontentsize – Emad