ios – UICollectionView的单元格在滚动后不会始终刷新

我在我的故事板(iPad)中定义了一个包含UICollectionView的视图,在视图的底部还有一个UIToolbar.
在UICollectionView中,我添加了一个UICollectionViewCell(由iPadCellCollectionViewCell类实现),其中包含另一个视图,即Core-Plot Graph(CPTGraphHostingView类).

我有一个名为X的类来实现UICollectionViewDelegate和UICollectionViewDataSource.

在类X中,我构建了我的视图的每个单元格(在ViewDidLoad中)Core-Plot Graph,并且我有以下代码将图形链接到UICollectionViewCell的单元格

- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath {
static NSString* cellId = @"ChartCollectionId"; 

iPadCellCollectionViewCell* cell = [self.theCollectionView dequeueReusableCellWithReuseIdentifier:cellId forIndexPath:indexPath];

MyChart* chart = [_charts objectAtIndex:indexPath.row];

cell.hostingView.hostedGraph = chart.barChart;

return cell;

}

它的工作正常,我的所有图形都正确显示在屏幕上.当用户滚动视图时,会出现此问题,然后一个或多个单元格变为“空白”.我真的不明白为什么

我找到了一个解决方法,而不是在Interface Builder中的UICollectionViewCell中添加CPTGraphHostingView,我自己构建并且之前的代码变成:

- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath {
static NSString* cellId = @"ChartCollectionId"; 

iPadCellCollectionViewCell* cell = [self.theCollectionView dequeueReusableCellWithReuseIdentifier:cellId forIndexPath:indexPath];


[cell.contentView addSubview:[_hostingViews objectAtIndex:indexPath.row]];

return cell;

}

有了这个代码,一切都正常.有没有任何解释为什么当我在IBIC中添加CPTGraphHostingView在UICollectionViewCell不起作用?

每次调用该方法时调用“addSubview”是一个问题吗?没有内存泄漏?

解决方法

在使用sectionInsets时,这似乎是UICollectionView中的一个错误.
细胞不会看不见,有时在快速滚动时,它们被错放在界限之外.

所以如果你通常每行有3个项目,你会得到一行中的第四个项目,但在下一行的第一个位置没有任何项目.

如果将UICollectionView设置为不剪辑到边界,并将其移动到UI的顶部,
你可能会看到这个对齐的单元格.

我的解决方案到目前为止还没有使用sectionInsets,并且通过在section标题中使用contentInset和一些空格来包围它.

我也在Twitter上发现了一些其他的人,同样的问题.还有一个关于它的错误报告:12353513

相关文章

UITabBarController 是 iOS 中用于管理和显示选项卡界面的一...
UITableView的重用机制避免了频繁创建和销毁单元格的开销,使...
Objective-C中,类的实例变量(instance variables)和属性(...
从内存管理的角度来看,block可以作为方法的传入参数是因为b...
WKWebView 是 iOS 开发中用于显示网页内容的组件,它是在 iO...
OC中常用的多线程编程技术: 1. NSThread NSThread是Objecti...