UICollectionView系统BUG记录— reloadData后变空白,cellForItemAtIndexPath不执行

最近项目在使用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;

}
 

猜你喜欢

转载自blog.csdn.net/u013712343/article/details/126604633
今日推荐