【问题标题】:CollectionView layout doesn't refresh until scrollCollectionView 布局在滚动之前不会刷新
【发布时间】: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] 不起作用。

有人能让我走上正确的道路吗?

提前致谢 克里斯

【问题讨论】:

    标签: ios uicollectionview uicollectionviewlayout


    【解决方案1】:

    所以,事实证明我把它设置错了。正如来自苹果的this article 所说:

    在开始构建自定义布局之前,请考虑这样做是否适合 真的很有必要。

    UICollectionViewFlowLayout 类提供了一个 已经优化的大量行为 效率,并且可以通过多种方式进行调整以实现许多 不同类型的标准布局。唯一需要考虑的时间 实现自定义布局有以下几种情况:

    您想要的布局看起来不像网格或基于行的中断 布局(一种布局,其中项目被放置在一行中,直到它被填满, 然后继续到下一行,直到放置所有项目)或 需要在多个方向上滚动。

    您想频繁地更改所有单元格的位置,这样会更有效 修改现有的流布局而不是创建自定义布局。

    而且我的布局配置非常简单。所以我把它复杂化了。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-02-12
      • 1970-01-01
      • 2018-09-15
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多