2011-10-18 180 views
4

我有一個UITableView設置爲不啓用滾動,它存在於UIScrollView中。我這樣做是因爲設計規範要求的東西看起來像是一個表視圖(實際上它們並排有兩個),而且實現表格視圖要容易得多,而不是添加一大堆按鈕,(分組表格視圖)。UITableView內容高度

問題是,我需要知道滾動視圖的容器視圖有多大,所以它滾動表視圖的整個高度。一旦加載,有沒有辦法找到tableview的高度?沒有像滾動視圖,框架似乎是靜態等內容視圖屬性...

任何想法?

+0

在這裏相同的情況。 – fatuhoku

回答

12

使用

CGRect lastRowRect= [tableView rectForRowAtIndexPath:index_path_for_your_last_row]; 
CGFloat contentHeight = lastRowRect.origin.y + lastRowRect.size.height; 

然後可以使用,則contentHeight變量設置爲contentSize滾動視圖。

爲我的作品
+0

很酷。希望我能想到這一點!謝謝:-) – mickm

+0

這應該被接受爲正確的答案。 –

+0

對於具有自動化單元格的表似乎不起作用。 – Ash

3

一個更通用的解決方案:

CGFloat tableViewHeight(UITableView *tableView) { 
    NSInteger lastSection = tableView.numberOfSections - 1; 
    while (lastSection >= 0 && [tableView numberOfRowsInSection:lastSection] <= 0) 
     lastSection--; 
    if (lastSection < 0) 
     return 0; 
    CGRect lastFooterRect = [tableView rectForFooterInSection:lastSection]; 
    return lastFooterRect.origin.y + lastFooterRect.size.height; 
} 

除了安德烈的解決方案,它佔空段和段尾。

1

UITableViewUIScrollView一個子類,所以它有一個contentSize屬性,你應該能夠使用沒有問題:

CGFloat tableViewContentHeight = tableView.contentSize.height; 
scrollView.contentSize = CGSizeMake(scrollView.contentSize.width, tableViewContentHeight); 

然而,隨着severalother SO問題所指出的那樣,當你做一個更新到表格視圖(如插入一行),其contentSize似乎不會立即更新,就像UIKit中大多數其他動畫調整大小一樣。在這種情況下,您可能需要訴諸於邁克爾曼納的回答。 (雖然我認爲它更有意義作爲UITableView的類別實現)

1

您可以運行這些部分並使用rectForSection來計算總高度(也包括頁腳和標題!)。在迅速我使用以下擴展UITableView

extension UITableView { 
    /** 
    Calculates the total height of the tableView that is required if you ware to display all the sections, rows, footers, headers... 
    */ 
    func contentHeight() -> CGFloat { 
     var height = CGFloat(0) 
     for sectionIndex in 0..<numberOfSections { 
      height += rectForSection(sectionIndex).size.height 
     } 
     return height 
    } 

}