2012-10-18 34 views
2

在我的應用程序中,我有一個帶有自定義表格視圖單元格的表格視圖。在iOS5我使用下面的代碼片段來獲得我的自定義單元格的正確高度。在iOS6之後做一個[tableView reloadData] [cell layoutIfNeeded]不會觸發單元格的layoutSubViews方法。並因爲這個單元高度被錯誤地計算。任何好的建議,爲什麼這是?或者也許可以採用其他方法來做到這一點iOS6 layoutIfNeeded不觸發UITableViewCell的layoutSubViews

- (CGFloat)tableView:(UITableView *)aTableView heightForRowAtIndexPath:(NSIndexPath *)indexPath { 
    UITableViewCell *cell = [self tableView:aTableView cellForRowAtIndexPath:indexPath]; 
    [cell setNeedsLayout]; 
    [cell layoutIfNeeded]; 
    [cell sizeToFit]; 

    return cell.frame.size.height; 
} 

回答

1

您的代碼片段有關於表視圖生命週期的基本錯誤。如果它適用於iOS 5或您聲稱的任何地方,那麼您可能只是幸運而已。

首先,tableView:heightForRowAtIndexPath:被調用之前tableView:cellForRowAtIndexPath:。此時,NO細胞存在。你不應該在這裏打電話UITableViewCell *cell = [self tableView:aTableView cellForRowAtIndexPath:indexPath];

用於佈局的tableView的子視圖(假設它是視圖控制器的頂層視圖),即可重寫視圖控制器viewWillLayoutSubviews方法。這就是蘋果推薦的。

了鋪設表格視圖單元格的子視圖,你可以繼承的UITableViewCell並覆蓋其layoutSubviews方法。

相關問題