正如上面所說的,在UITableView中用於報頭的高度不通過自動佈局的控制,而是由
-(CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section
頁腳高度由
-(CGFloat)tableView:(UITableView *)tableView heightForFooterInSection:(NSInteger)section
最後細胞高度由
設置設定
-(CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath{
tableview從故事板,XIB文件或代碼加載單元格。它使用上述方法爲頁眉,頁腳和單元格設置框架的大小,並將它們的視圖大小設置爲適合該空間。
瞭解自動佈局不會更改這些尺寸是很重要的,它只處理用於佈局容器內視圖的規則。
如果您的單元格/頁眉/頁腳正在使用靜態大小,那麼這很容易。您只需鎖定所有子視圖的高度,將您的單元格設置爲您返回高度相同的大小...並且所有內容都看起來應該如何。
動態單元格/頁眉/頁腳需要更多工作。
基本上,你會被要求告訴tableview你的單元格/頁眉/頁腳的大小,然後再實際製作它,並調整所有子視圖的大小。
您可以通過在cellForRowAtIndexPath和heightForRowAtIndexPath方法中設置一個斷點來快速測試,高度首先被調用。
對於動態tableviewcell高度,一個常見的技巧是在viewDidLoad中創建一個單元並保存它以計算高度。然後,當您到達heightForRowAtIndexPath或heightForHeaderInSection時,請使用pre製作的單元格放入您將在最終單元格中使用的值,對於UILabels,請使用sizeWithFont(iOS 7之前)或boundingRectWithSize(iOS 7.0+),sizeThatFits for UITextViews。 (對於將來有人閱讀,請檢查這些方法是否未被更新的東西替代)
因此,將您想要的文本放入虛擬單元格中,獲取標籤和文字視圖的高度,在它們之間添加空格並在完成後返回最終尺寸。
然後在cellForRowAtIndexPath或headerForSection中重做值的設置,但是會顯示實際的單元格。
如果您的身高計算符合您的自動佈局設置,那麼所有東西都將完美地貼合在它的空間中。
如果要更改單元格或標題的高度後,它已經繪製,那麼你會希望通過執行類似更新實現代碼如下:
[self.tableView beginUpdates];
// change the data that will cause cell height to be different in heightForCellAtIndexPath or which will change a header or footer height calculation
[self.tableView endUpdates];
這將導致實現代碼如下檢查大小它只有更新單元格或頁眉/頁腳如果更改。
來源
2013-11-07 03:30:13
DC2
描述或理想地插入一張圖片,說明如何將HeaderView「連接」在故事板中。 – bilobatum
沒問題,對不起,我最初應該這樣做。從故事板添加的屏幕截圖。謝謝! – svguerin3
這很有用。您在調用標題視圖時在技術上不是表視圖標題視圖。這只是您從對象庫中拖出的視圖。我會在我的回答中解釋更多。 – bilobatum