我想了解一个常见的正确的自定义单元格高度计算方法。
我的单元格是从笔尖加载的,它们有两个多行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