CollectionView 布局在滚动之前不会刷新
Posted
技术标签:
【中文标题】CollectionView 布局在滚动之前不会刷新【英文标题】:CollectionView layout doesn't refresh until scroll 【发布时间】:2014-04-18 21:58:52 【问题描述】:展示我的问题的最佳方式是使用下面的视频:
http://foffer.dk/collectionview.mp4
如您所见,在开始滚动之前,我的 collectionView 不会更新其布局以正确显示项目。我正在使用单独的 collectionViewFlowLayout 模型。这是我的代码:
CollectionViewFlowLayout.m:
@implementation CollectionViewFlowLayout
- (void)prepareLayout
CGFloat halfWidth = self.collectionView.bounds.size.width / 2;
CGFloat halfHeight = self.collectionView.bounds.size.height / 2;
self.itemSize = CGSizeMake(halfWidth, halfHeight);
self.minimumInteritemSpacing = 0;
self.minimumLineSpacing = 0;
// indicate that we want to redraw as we scroll
- (BOOL)shouldInvalidateLayoutForBoundsChange:(CGRect)newBounds
return YES;
@end
我的 PhotosCollectionViewController(我忽略了标准 collectionView 的东西,因为我认为这对这个问题并不重要,如果是,请告诉我,我会发布它):
-(instancetype)init
UICollectionViewFlowLayout *layout = [[CollectionViewFlowLayout alloc] init];
return (self = [super initWithCollectionViewLayout:layout]);
-(void) viewDidLoad
[super viewDidLoad];
[self.collectionView registerClass:[FOFPhotoCell class] forCellWithReuseIdentifier:@"photo"];
self.collectionView.backgroundColor = [UIColor whiteColor];
CGFloat bottomLayoutGuide = self.tabBarController.tabBar.frame.size.height;
self.collectionView.contentInset = UIEdgeInsetsMake(0, 0, bottomLayoutGuide, 0);
-(BOOL)shouldAutorotate
return YES;
我需要在某处调用 invalidateLayout 吗?我似乎无法弄清楚在哪里实现该方法。 [self.collectionView invalidateLayout]
不起作用。
有人能让我走上正确的道路吗?
提前致谢 克里斯
【问题讨论】:
【参考方案1】:所以,事实证明我把它设置错了。正如来自苹果的this article 所说:
在开始构建自定义布局之前,请考虑这样做是否适合 真的很有必要。
UICollectionViewFlowLayout 类提供了一个 已经优化的大量行为 效率,并且可以通过多种方式进行调整以实现许多 不同类型的标准布局。唯一需要考虑的时间 实现自定义布局有以下几种情况:
您想要的布局看起来不像网格或基于行的中断 布局(一种布局,其中项目被放置在一行中,直到它被填满, 然后继续到下一行,直到放置所有项目)或 需要在多个方向上滚动。
您想频繁地更改所有单元格的位置,这样会更有效 修改现有的流布局而不是创建自定义布局。
而且我的布局配置非常简单。所以我把它复杂化了。
【讨论】:
以上是关于CollectionView 布局在滚动之前不会刷新的主要内容,如果未能解决你的问题,请参考以下文章