如果我有自定义单元格,我可以在 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 来查找单元格的大小吗?的主要内容,如果未能解决你的问题,请参考以下文章