我想了解一個常見的正確的自定義單元格高度計算方法。
我的單元格是從筆尖加載的,它們有兩個多行UILabels,一個在另一個之上。
目前我在viewDidLoad中創建特殊配置單元格,並在heightForRowAtIndexPath中使用它。iOS正確的heightForRowAtIndexPath計算方式
-(CGFloat) tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath {
[self configureCell:self.configurationCell forIndexPath:indexPath];
CGRect configFrame = self.configurationCell.frame;
configFrame.size.width = self.view.frame.size.width;
self.configurationCell.frame = configFrame;
[self.configurationCell layoutSubviews];
UILabel *label = (UILabel *)[self.configurationCell viewWithTag:2];
float height = label.frame.origin.y + label.frame.size.height + 10;
return height;
}
它的作品,但似乎是一個壞的方式。我認爲必須爲每個項目和每個方向預先計算高度。但是我無法找到一種讓它更好,更直接的方法。
你能幫我嗎?
單元格標籤的樣式(如字體和屏幕邊框的偏移量)必須從nib文件加載(單元格在nib內)。
新增的小區的layourSubviews方法:標籤
-(void) layoutSubviews {
[super layoutSubviews];
[self.shortDescriptionLabel resize];
CGRect longDescriptionFrame = self.longDescriptionLabel.frame;
longDescriptionFrame.origin.y = self.shortDescriptionLabel.frame.origin.y + self.shortDescriptionLabel.frame.size.height + 5;
self.longDescriptionLabel.frame = longDescriptionFrame;
[self.longDescriptionLabel resize];
}
調整大小的方法簡單地增加了它的高度,以適合所有文本。所以單元格的高度計算爲longDescriptionLabel.bottom + 10.簡單的代碼,但不是很漂亮。
我沒有在heightForRowAtIndexPath中創建任何東西。我只是爲單元格視圖設置文本和調用佈局。這個配置單元在viewDidLoad的nib文件中創建一次。所以你錯了 - 在heightForRowAtIndexPath裏面沒有創建視圖。我想找出直接的方法來進行計算。在控制器中獲取單元格的字體大小和尺寸對我來說太複雜了。 – Division 2012-03-29 16:48:51
那麼你沒有提供任何'layoutSubviews'的內容,所以對我來說這是一個黑匣子。儘管如此,我的建議仍然存在。你不應該在''heightForRowAtIndexPath''中做任何複雜的事情,因爲每行都會調用它。我正在討論在哪裏安排你的觀點的最佳選擇。如果你覺得它太複雜了,那麼你不需要這個優化。 – 2012-03-30 00:01:04
我在我的文章中添加了layoutSubviews方法。如你所見,這並不複雜。我應該用高度預先計算來取代這個簡單的方法嗎? – Division 2012-03-30 08:15:45