最近项目在使用UICollectionView的时候,发现一个大坑,问题描述:
1、无法全部加载数据,contentSize是正确的,可以滑动
2、下拉刷新的时候,执行了reloadData,页面出现空白,并且不执行delegate
解决思路:
collectionView执行了reloadData代码后,没有执行cellForItem代理方法,可能存在两种原因:
1、在执行reloadData后,可能collectionView被一层假的view所遮挡,这种情况下是不会执行cellForItem方法的,
大家可以通过层级关系查看是否存在
2、在执行reloadData的时候,代码中有把collectionView的size赋值为0,这种情况下是不会执行cellForItem方法的,
大家可以查看自己的代码
这两情况都没有解决我遇到的问题,最起码无法解释数据无法全部加载问题,
然后百度发现一个帖子,瞬间让我明白,是在collectionView的header中,我使用NSAttributedString处理html字符串,
然后用Label进行展示了,注销代码后,一切正常,这边我不做过多解释,可以查看原帖子链接:https://www.jianshu.com/p/7d9404654221#comments
帖子中有很好的解决方法,出于对私有Api的修改(因为不清楚会不会对其他界面有影响,版本的升级会不会有影响),
还有我这边的html字符串并不复杂,我是用保守的处理方式,即去除html中标签方法,方法如下:
-(NSString *)filterHTML:(NSString *)html
{
NSScanner * scanner = [NSScanner scannerWithString:html];
NSString * text = nil;
while([scanner isAtEnd]==NO)
{
[scanner scanUpToString:@"<" intoString:nil];
[scanner scanUpToString:@">" intoString:&text];
html = [html stringByReplacingOccurrencesOfString:[NSString stringWithFormat:@"%@>",text] withString:@""];
}
return html;
}