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 布局在滚动之前不会刷新的主要内容,如果未能解决你的问题,请参考以下文章

iOS:滚动时的 CollectionView 棒头

关于 UICollectionView的基本使用

collectionView布局

自定义 CollectionView 布局重新加载数据不起作用

CollectionView垂直缩放卡片布局

CollectionView垂直缩放卡片布局