seb*_*ien 14 ios cptbarplot uicollectionview uicollectionviewcell
我在我的故事板(iPad)中定义了一个包含a的视图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;
Run Code Online (Sandbox Code Playgroud)
}
它工作正常,我的所有图表都正确显示在屏幕上.当用户滚动视图时,会出现问题,然后一个或多个单元格变为"空白".我真的不明白为什么.
我已经找到一个解决办法,而不是添加CPTGraphHostingView在UICollectionViewCell在界面生成器,我建立它自己和以前的代码变为:
- (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;
Run Code Online (Sandbox Code Playgroud)
}
使用此代码一切正常.是否有任何解释为什么它不工作的时候我加入了CPTGraphHostingView在UICollectionViewCell与IB?
每次调用该方法时调用"addSubview"是一个问题吗?没有内存泄漏?
我有类似的问题.我通过setFrame:在我的自定义内容上调用时强制重绘来修复它.在您的情况下,子类CPTGraphHostingView并重写此方法:
-(void)setFrame:(CGRect)frame {
[super setFrame:frame];
[self setNeedsDisplay]; // force drawRect:
}
Run Code Online (Sandbox Code Playgroud)
编辑:一个简单的方法来刷新细胞意见时,他们被重用是覆盖applyLayoutAttributes:在iPadCellCollectionViewCell如下:
-(void)applyLayoutAttributes:(UICollectionViewLayoutAttributes *)layoutAttributes {
// apply custom attributes...
[self.hostingView setNeedsDisplay]; // force drawRect:
}
Run Code Online (Sandbox Code Playgroud)
关于您的解决方法:内容视图中会有越来越多的子视图,这可能不是一件好事.但是,如果您在添加新子视图之前删除任何旧子视图,那也应该没问题.
使用sectionInsets 时,这似乎是UICollectionView 中的一个错误。单元格不会变得不可见,有时在快速滚动时它们会错位出界。
因此,如果您通常每行有 3 个项目,那么您将在一行中获得第四个项目,但在下一行的第一个位置没有项目。
如果您将 UICollectionView 设置为不剪切到边界,并将其移动到 UI 顶部,您可能会看到这个未对齐的单元格。
到目前为止,我的解决方案是不使用sectionInsets,并使用contentInset 和节标题中的一些空白空间将其包围。
我还在 Twitter 上发现其他一些人也有同样的问题。还有一个关于它的错误报告:12353513
| 归档时间: |
|
| 查看次数: |
12411 次 |
| 最近记录: |