2015-04-05 56 views
63

iOS 8的新功能,只需設置估計的行高,即可獲得100%動態表格視圖單元格,然後使用自動佈局在單元格中佈局元素。如果內容的高度增加,單元格的高度也會增加。這是非常有用的,我想知道是否可以在表視圖中的節標題完成相同的壯舉?是否可以使用自動佈局獲取動態表格視圖部分標題高度?

可以之一,例如,創建一個在tableView:viewForHeaderInSection:UIView,加UILabel子視圖,用於對視圖標籤指定自動佈局限制,並且有高度的觀點增加,以適應標籤的內容,而無需實現tableView:heightForHeaderInSection:

viewForHeaderInSection的文檔聲明:「此方法只有在tableView:heightForHeaderInSection:也實現時才能正常工作。」我還沒有聽說iOS 8是否有任何改變。

如果一個人不能這樣做,模仿這種行爲的最好方法是什麼?

回答

164

這是可能的。它與iOS 8中實現的動態單元高度一樣是新的權利。

它非常簡單。就在viewDidLoad補充一點:

self.tableView.sectionHeaderHeight = UITableViewAutomaticDimension; 
self.tableView.estimatedSectionHeaderHeight = 25; 

然後覆蓋viewForHeaderInSection和使用自動佈局認爲應該限制元素的視圖。而已!無需執行heightForHeaderInSection。實際上sectionHeaderHeight也不需要說明,我只是爲了清楚而添加了它。

請注意,在iOS 11中,默認情況下,單元格和頁眉/頁腳視圖使用估計的高度。唯一要做的就是提供估計的高度,以便更好地告知系統預期的結果。默認值是UITableViewAutomaticDimension,但您應該提供一個更好的估計值,即如果可能的話,它們的平均高度。

+2

這很酷,如果它的工作原理,但文檔不提它,我也沒有在WWDC會議上,如果我沒有記錯。 「UITableViewAutomaticDimension」的文檔說「如果你在'tableView:heightForHeaderInSection:'或'tableView:heightForFooterInSection:'中返回這個常量,'UITableView'使用一個適合從'tableView:titleForHeaderInSection:'或'tableView: titleForFooterInSection:'(如果標題不是'nil')。「 – 2015-04-21 05:03:56

+1

我可以確認它適用於我設置的自動佈局約束,包括添加的其他填充 - 它不僅僅是文本的高度。事實上,我沒有實現'tableView:titleForHeaderInSection:',沒有必要。 – Joey 2015-04-21 05:06:36

+0

這很令人興奮。很棒的發現。 – 2015-04-21 05:07:10

19

這可以通過在你的表格視圖上設置(或返回)estimatedSectionHeaderHeight來完成。

如果你的部分頭部被設置estimatedSectionHeaderHeight後重疊你的細胞,請確保您使用的是estimatedRowHeight爲好。

(我因爲第二段包含一個答案,可以通過所有的一些可能會錯過的評論看完後發現一個問題,增加這個答案。)

+0

它適合我。謝謝 – chipbk10 2017-04-25 08:13:49

+0

謝謝,在設置'estimatedRowHeight'後,這個工程就像是魅力:) – 2017-08-08 07:43:30

5

我試圖

self.tableView.sectionHeaderHeight = UITableViewAutomaticDimension; 
self.tableView.estimatedSectionHeaderHeight = 25; 

但它沒有用多行標籤正確標題。 添加到了解決我的問題:

override func viewWillAppear(_ animated: Bool) { 
    super.viewWillAppear(animated) 

    // Recalculates height 
    tableView.beginUpdates() 
    tableView.endUpdates() 
} 
+0

這對我有效 – Neko 2017-09-21 09:57:07

+0

確定數據源函數''tableView:estimatedHeightForHeaderInSection''和''tableView:heightForHeaderInSection''而不是在viewDidLoad處定義。 – 2018-02-08 06:10:42

相關問題