UICollectionView 渲染问题
Posted
技术标签:
【中文标题】UICollectionView 渲染问题【英文标题】:UICollectionView Rendering Issue 【发布时间】:2015-12-08 23:55:24 【问题描述】:所以我对 UICollectionView 有一些问题,这似乎是互联网上的一个常见主题。 Here、Here 和 Here。我已经尝试了链接建议。所以只是一些背景。
1.) 我正在从 Parse.com 提取数据(没有问题)
2.) 结果被循环并填充到数组中,然后填充单元格。 (就像一个 UITableView)
3.) 数据仅基于文本并相应地填充,目前没有要处理的图像;-)。
问题似乎出在我渲染数据集的时候。我已将每行之间的行距设置为以下;
//reduce each section to 1px so that it looks like a record set.
- (CGFloat)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout*)collectionViewLayout minimumInteritemSpacingForSectionAtIndex:(NSInteger)section
return 1.0;
//reduce each section to 1px so that it looks like a record set.
- (CGFloat)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout*)collectionViewLayout minimumLineSpacingForSectionAtIndex:(NSInteger)section
return 1.0;
- (UIEdgeInsets)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout *) collectionViewLayout insetForSectionAtIndex:(NSInteger)section
//UIEdgeInsetsMake(top, left, bottom, right);
return UIEdgeInsetsMake(0.0f, 0.0f, 0.0f, 0.0f);
-(BOOL)shouldInvalidateLayoutForBoundsChange:(CGRect)newBounds
return YES;
这会相应地起作用。 之后你滚动(见下面的截图)
错误的渲染
正确渲染
小区代码
- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath
static NSString *identifier = @"cell";
PatternCollectionViewCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:identifier forIndexPath:indexPath];
PFObject *cellObject = [flightRecordData objectAtIndex:indexPath.row];
/* ALL THE UILABEL ELEMENTS ARE SET HERE JUST REMOVED TO SAVE SPACE */
cell.layer.shouldRasterize = YES;
cell.layer.rasterizationScale = [UIScreen mainScreen].scale;
[cell.layer setNeedsDisplay];
return cell;
我很乐意处理渲染问题,因为除此之外它还可以工作。然而,我的强迫症正在发作,它正在努力解决问题所在。我什至已经部署到设备上,看看它是否是模拟器问题。我尝试过但似乎没有用的其他人建议的每个帖子。
关于如何解决这个问题的任何想法?我是 ios 新手,所以要温柔:-P。
更新: 感谢您的反馈,下面是故事板的课程和屏幕截图。我将自定义类用作我需要时调用的对象。
自定义 UICollectionViewCell 类
@interface PatternCollectionViewCell : UICollectionViewCell
IBOutlet UILabel *pilotNameLabel;
IBOutlet UILabel *pilotTotalHoursLabel;
//etc etc...
@property (nonatomic,strong) IBOutlet UILabel *pilotNameLabel;
@property (nonatomic,strong) IBOutlet UILabel *pilotTotalHoursLabel;
故事板
CollectionView
CollectionViewCell
自定义单元
【问题讨论】:
如果是在您滚动之后,可能是您重新整理单元格时出现的问题。在您的自定义单元格中,您是否调用了所有正确的方法及其[超级方法]?小区标识符是否正确? 您并没有告诉我们您的集合视图和自定义单元格是来自故事板,还是以编程方式创建(或两者兼而有之)。您也没有告诉我们您的自定义单元格的结构,即浅灰色背景的构成是什么?布局中itemSize
/estimatedItemSize
是什么,单元格的实际大小是多少?
公平的 cmets,我正在使用情节提要,带有 UICollectionViewController 的嵌入式视图。我已经尝试过嵌入和扩展 CollectionView 的 UIViewController 中的两个结果都是相同的。自定义单元类只是每个标签的空对象。我会更新问题来说明。
您的收藏视图单元格大小设置为 58 像素高。您的单元格设置为 52 像素高。注意:回复评论时,请引用您正在回复的用户(@+用户名,您将获得自动完成),以便他/她得到通知。
@jcaron 感谢关于自动完成的建议。是的 58, 52 像素高。我可以调整以使它们相同,但我认为布局功能将其强制为 1.0 像素。不过我还是会试一试的。
【参考方案1】:
流布局中给定的项目大小(在 Interface Builder 中的集合视图上配置)不匹配,高度为 58 像素,自定义单元格的高度仅为52 像素。
这解释了单元格周围的额外间距。
【讨论】:
完美。显然我的菜鸟经验。我不喜欢 Apple Storyboard,我在上面花了很多时间。谢谢老兄。以上是关于UICollectionView 渲染问题的主要内容,如果未能解决你的问题,请参考以下文章