如果我有自定义单元格,我可以在 heightForRowAtIndexPath 中调用 tableView cellForRowAtIndexPathtableView 来查找单元格的大小吗?

Posted

技术标签:

【中文标题】如果我有自定义单元格,我可以在 heightForRowAtIndexPath 中调用 tableView cellForRowAtIndexPathtableView 来查找单元格的大小吗?【英文标题】:Can i call tableView cellForRowAtIndexPathtableView in heightForRowAtIndexPath to find cell's size if I have a custom cell? 【发布时间】:2012-04-03 18:49:17 【问题描述】:

我可以在heightForRowAtIndexPath 中调用tableViewcellForRowAtIndexPathtableView 来查找单元格的大小吗?

在性能方面是否过于昂贵,如果不是,如果它来自 XIB,我还能如何找到单元格高度?

【问题讨论】:

【参考方案1】:

不要这样做。无论如何它都行不通。 tableView:heightForRowAtIndexPath: 为您的所有单元格调用。并且cellForRowAtIndexPath: 无论如何都不会为不可见的 indexPaths 返回单元格。

tableView:heightForRowAtIndexPath: 第一次被调用时(就在numberOfSectionsInTableView:tableView:numberOfRowsInSection: 之后),根本没有单元格。

只需在界面生成器中检查单元格的高度。选择 UITableViewCell 视图并查看大小面板。

因为tableView:heightForRowAtIndexPath: 是为每个单元格调用的,如果您只有一个高度,您应该在 viewDidLoad 中设置单元格的高度。如果tableView:heightForRowAtIndexPath: 未实现,则不会调用它,如果您有很多单元格,这很好。

- (void)viewDidLoad 
    [super viewDidLoad];
    self.tableView.rowHeight = 44.0f;

如果您有不同的高度,请从您的数据源中计算出高度。例如。从您的 dataSource NSArray 检查 indexPath 处的对象,并使用您在 tableView:cellForRowAtIndexPath: 中使用的相同逻辑来确定要使用哪个单元格。然后返回适当的高度。


编辑:我刚刚对其进行了测试,并在 tableView 中查询tableView:heightForRowAtIndexPath: 中的单元格会导致无限循环。

【讨论】:

【参考方案2】:

另一种方法是:

- (CGFloat) tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath

    static CGFloat cellHeight = 0;
    static dispatch_once_t onceToken;
    dispatch_once(&onceToken, ^
        UITableViewCell* cell = [tableView dequeueReusableCellWithIdentifier:@"cellIdentifyer"];
        cellHeight = cell.height;
    );

return cellHeight;

【讨论】:

以上是关于如果我有自定义单元格,我可以在 heightForRowAtIndexPath 中调用 tableView cellForRowAtIndexPathtableView 来查找单元格的大小吗?的主要内容,如果未能解决你的问题,请参考以下文章

UITableView 中带有自定义单元格的部分

没有在自定义单元格上调用文本字段确实开始编辑

如何填充自定义单元格的 UIPickerView

在不配置的情况下增加单元格的高度?

图像会自动添加到 UItableView Cell 中吗?

如何从自定义表格视图单元类中获取对表格视图控制器的引用