我有一个在每个屏幕上都使用tableviews的应用程序。我有很多自定义单元格,每个单元格都有不同的高度。现在计算高度是一个相当大的挑战。我正在寻找一种通用方法,它将返回每个自定义单元格的高度,而不使用heightForRowAtIndex。我之所以不想使用heightForRowAtIndex,是因为我在一个单元格后面有4个xib,而且我不想用 if ( UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad ) {}
类检查来弄乱这个方法。对于记录单元,xibs是iPhone,iPad,英文和阿拉伯文版本:
cell_en.xib
cell_en〜ipad.xib
cell_ar.xib
cell_ar〜ipad.xib
目前,我正在尝试关注;
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { switch (indexPath.row) { case 0: { VPCell1 *cell=[VPCell1 cellForTable:tableView withOwner:self]; [tableView setRowHeight:CGRectGetHeight(cell.contentView.frame)]; return cell; } case 1: { VPCell2 *cell=[VPCell2 cellForTable:tableView withOwner:self]; [tableView setRowHeight:CGRectGetHeight(cell.contentView.frame)]; return cell; } case 2: { VPCell3 *cell=[VPCell3 cellForTable:tableView withOwner:self]; [tableView setRowHeight:CGRectGetHeight(cell.contentView.frame)]; return cell; } } }
我在这里使用[tableView setRowHeight:CGRectGetHeight(cell.contentView.frame)];
为每个单元格设置行高
原来应该使用setRowHeight方法,如果tableview中的所有单元格具有相同的高度,那么绝对不能在这里选择性能优化。我愿意接受解决这个烂摊子的想法。
谢谢!
答案 0 :(得分:1)
如果tableview的所有单元格具有相同的高度,则设置tableview rowHeight,但只在加载tableview时设置一次,让我们在控制器viewDidLoad中说。
如果在同一个tableView中有不同高度的单元格,则必须使用heightForRowAtIndexPath。不,它并不痛苦,只是它的设计方式。
答案 1 :(得分:0)
使用iOS8,您可以使用AutoLayout并让UITableView计算行高。要告诉UITableView关于行高的自我估计,你必须在viewDidLoad中写这些行:
self.tableView.rowHeight = UITableViewAutomaticDimension;
self.tableView.estimatedRowHeight = 50.0; // your estimated average cell height
在您的自定义单元格中,您必须覆盖方法" layoutSubviews":
- (void)layoutSubviews
{
[super layoutSubviews];
// Make sure the contentView does a layout pass here so that its subviews have their frames set, which we
// need to use to set the preferredMaxLayoutWidth below.
[self.contentView setNeedsLayout];
[self.contentView layoutIfNeeded];
self.details.preferredMaxLayoutWidth = CGRectGetWidth(self.details.frame);
}
上述方法基于自定义单元格,其中所有元素都放置在内容视图中。此外,所有元素都应使用约束进行管理。
在github上查看我的Example Project。
答案 2 :(得分:0)
UITableView.AutomaticDimension
本身并不适合我。
我还必须申请
uiDescription.SetContentCompressionResistancePriority(1000, UILayoutConstraintAxis.Vertical);
到我希望视图扩展其内容的元素