UICollectionView包装器视图框架更新

时间:2017-12-25 04:08:43

标签: ios uicollectionview uicollectionviewlayout

我有一个UIView的集合视图包装,集合视图与包装器视图具有相同的边界。并且集合视图数据源将被更改,因此包装器视图边界也会被更改。我用intrinsicContentSize实现了包装器视图collectionView.collectionViewLayout.collectionViewContentSize方法,集合视图布局是UICollectionViewFlowLayout的子类,UICollectionView的单元格也实现了方法intrinsicContentSize,但是包装器视图没有使用集合视图内容大小更新框架。 collectionViewContentSize始终为CGRectZero。 我试过了

  [self.layout invalidateLayout];
  [self.collectionView reloadData];
  [self.collectionView layoutIfNeeded];

但没有用,  如何使用collectionView.collectionViewLayout.collectionViewContentSize更新包装器视图框。

下面有一些代码:

  ZXCollectionViewWrapperView *wrapperView = [[ZXCollectionViewWrapperView alloc] init];
  [self.view addSubview:wrapperView];
  [wrapperView mas_makeConstraints:^(MASConstraintMaker *make) {
    make.center.equalTo(self.view);
  }];
  self.wrapperView = wrapperView;

   /// wrapper view size 
- (CGSize)intrinsicContentSize {
  return self.collectionView.collectionViewLayout.collectionViewContentSize;
}


  ZXCollectionViewAlignedLayout *layout = [[ZXCollectionViewAlignedLayout alloc] init];
  self.layout = layout;
  ZXCollectionView *collectionView = [[ZXCollectionView alloc] initWithFrame:CGRectZero collectionViewLayout:layout];
  collectionView.dataSource = self;
  collectionView.delegate = self;
  collectionView.backgroundColor = [UIColor lightGrayColor];
  [self addSubview:collectionView];
  [collectionView mas_makeConstraints:^(MASConstraintMaker *make) {
    make.edges.equalTo(self);
  }];
  self.collectionView = collectionView;

  [self.collectionView zx_registerCellClass:[ZXCommendCell class]];

  self.dataSource = dataSource;
  [self.collectionView reloadData];
  [self.collectionView layoutIfNeeded];

1 个答案:

答案 0 :(得分:1)

当您使用autolayout时,您应该为包装器视图创建高度约束。然后,您可以将该约束的常量更改为等于集合视图内容大小,如下所示:

heightConstraint = make.height.equalTo(200) // initial height

然后您可以使用KVO来观察要更改和设置的集合视图内容大小

heightConstraint.constant = collectionView.contentSize.height

你可以参考这个来观察contentSize:observing contentSize (CGSize) with KVO in swift