用多个视图iphone计算自定义单元格高度

时间:2010-07-12 11:38:50

标签: iphone uitableview

我想用多个子视图计算我的自定义像元高度,例如标签,图像视图,按钮等。

如何计算此单元格大小?

似乎不建议在cellForRowAtIndxPath中执行它,同时在heightForRowAtIndexPath中获取Cell的实例,它进入无限循环。

我能够计算自定义单元格类中单元格的高度,但我不知道应该在哪里返回它。

由于该方法,heightForRowAtIndexPath没有获取单元格实例,如何告诉此方法我想要渲染计算高度的单元格类型?

感谢任何帮助。

提前完成。

3 个答案:

答案 0 :(得分:2)

理想情况下,您应该能够计算单元格的高度,而无需为其创建单元格。对于表中的每个单元格(而不仅仅是屏幕上的单元格),将调用tableView:heightForRowAtIndexPath:,如果必须在该方法中创建完整的单元格对象,则可能会对性能产生很大影响。

您必须根据indexPath参数派生单元格类型,方法与tableView:cellForRowAtIndexPath:

中的方法相同

答案 1 :(得分:0)

您始终可以在viewWillAppearviewDidLoad中加载细胞,然后将其添加到NSArray。然后,在tableView:heightForRowAtIndexPath:中,使用提供的indexPath,返回数组中相关单元格的高度。然后,在tableView:cellForRowAtIndexPath中,再次使用提供的indexPath,返回数组中的相关单元格。

请注意:
如果您有很多单元格,这可能会导致UI在加载单元格时锁定。为避免这种情况,您可以创建一个自定义方法来填充数组,并在后台线程上执行它。 此外,如果花费太长时间,tableView将不会显示所有单元格,因为您的阵列将不会完全填充。这意味着您应该在填充数组后调用[tableView reloadData];

答案 2 :(得分:-1)

这是'我是怎么做到的:

我在tableview中按照它们的类别顺序创建了一系列细胞,称为category_type,然后我检查了类别类型并计算了基于文本的控件的高度来计算单元格的整个高度。

NSString *category = [NSString stringWithFormat:[category_type objectAtIndex:indexPath.row]];

if([category isEqualToString:@"xyz"])
{
    xyzInstance = [arrayWithObjectsToLoad objectAtIndex:indexPath.row];


    float textHeight = [MLUtils calculateHeightOfTextFromWidth:editorialInstance.eletitle : [UIFont fontWithName:@"Helvetica" size:13.0] :320 :UILineBreakModeWordWrap];  //Dyanamic label height

    totalHt = 171 - 21 + textHeight + 20;     // My calculation for text part of label
    return totalHt;

}

我为所有类别做了这个。