UITableVIew 关于复用的坑

记录一个小坑
section header view的复用过程中,配置较低的手机(也可能是系统版本问题,具体没有详细验证),在tableView: viewForHeaderInSection:方法中,设置[tableView dequeueReusableHeaderFooterViewWithIdentifier:@"xxx"],进行section header 的复用时,tableview加载的header,会提前复用
所以这里需要注意,自定义的section header view,重新赋值时一定要清除原有数据,清除原有数据包括UI组件自身,所以,如果加载的header view 内部布局不相同的情况下, 要给每一个 subview 设置为 nil或者在header view中,subview不要使用懒加载进行初始化。类似下面这种方式

// 需要复用的view,尽量少用下面这种懒加载方式初始化
- (UIImageView *)headImgV {
    if (!_headImgV) {
        _headImgV = [[UIImageView alloc] init];
    }
    return _headImgV;
}

下面是这次header复用的一些log日志,可以明显看到,当section 0 第二次加载时,直接复用了 section1第一次的header。

第一次加载

[15:18:47] -[RiskQuestionVC2021 tableView:viewForHeaderInSection:] [第352行] 需要加载sectionHeader,section:0

[15:18:47] -[RiskQuestionVC2021 tableView:viewForHeaderInSection:] [第358行] section:0 header:

[tableview raloadData],第二次加载(增加了一个section)

[15:18:47] -[RiskQuestionVC2021 tableView:didSelectRowAtIndexPath:] [第408行] 加载新数据前,tableview高度 623.500000

[15:18:47] -[RiskQuestionVC2021 tableView:viewForHeaderInSection:] [第352行] 需要加载sectionHeader,section:0

[15:18:47] -[RiskQuestionVC2021 tableView:viewForHeaderInSection:] [第358行] section:0 header:

上面log日志可以明显的看出,第一次加载时 section:1 header:

你可能感兴趣的:(UITableVIew 关于复用的坑)