UICollectionView包装器视图框架更新

问题描述 投票:0回答:1

我有一个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];
ios uicollectionview uicollectionviewlayout
1个回答
1
投票

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

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

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

heightConstraint.constant = collectionView.contentSize.height

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

© www.soinside.com 2019 - 2024. All rights reserved.