我正在努力弄清楚如何优化性能并提高代码质量。 我有以下布局:
OuterTableView
Outer Cell
UILabel (title label)
InnerTableView
Inner Cell (item cell)
Inner Cell (item cell)
...
此布局的目的是可扩展的外部表。在崩溃状态下,只有UILabel(仅标题标签)可见。当用户点击外部单元格时,单元格会扩展并显示内部单元格。
在外部表控制器中,我有3个功能(简化):
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
if (tableView == self.tableView) {
// ServiceGroupCell - outer cell
ServiceGroupCell *serviceCell = [tableView dequeueReusableCellWithIdentifier:@"service_group_cell"];
[self configureCell:serviceCell forIndexPath:indexPath];
return serviceCell;
}
return nil;
}
- (void) configureCell:(ServiceGroupCell *) cell forIndexPath:(NSIndexPath *) indexPath {
// styling for outer cell and passing data for inner cells
}
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath {
ServiceGroupCell *serviceGroupCell = [tableView dequeueReusableCellWithIdentifier:@"service_group_cell"];
[self configureCell:serviceGroupCell forIndexPath:indexPath];
[serviceGroupCell layoutSubviews];
CGFloat height = [serviceGroupCell.contentView systemLayoutSizeFittingSize:UILayoutFittingCompressedSize].height;
return height;
}
内部表控制器
- (void)layoutSubviews {
[self.cellTableView layoutSubviews];
// set height constraint for inner table view
self.heightLayoutConstraint.constant = self.cellTableView.contentSize.height;
}
我有疑问: 1)如您所见,对于外表的每个单元格,configureCell被调用两次。有没有办法缓存或只调用一次? 2)systemLayoutSizeFittingSize返回0.有什么想法吗?
答案 0 :(得分:0)
2)systemLayoutSizeFittingSize返回0.有什么想法吗?
您的约束可能已丢失。确保在.xib文件中指定单元格宽度和高度的约束。
答案 1 :(得分:-1)
我想,细胞内部的其他细胞是个坏主意。您可以创建一些部分,并使用方法didSelectRowAtIndexPath,当用户点击部分中的单元格时,将细胞添加到此部分。或者使用带有自定义nsview的scrollview,其中放入tableview。多数民众赞成只是解决。
有没有办法缓存或只调用一次? - 尝试willDisplayCell
方法。