使用IGListKit在layoutSubviews()中更改UICollectionView的框架和contentInset

时间:2019-02-20 02:53:42

标签: ios swift uicollectionview iglistkit

我需要更改集合视图(即frame)的contentInset.top和最重要的内容插图(UICollectionView)。顶部插图和帧的更改取决于超级视图的范围和集合视图的内容偏移,因此我将插图更改代码放在layoutSubviews()中。

override func layoutSubviews() {
  super.layoutSubviews()

  collectionView.collectionViewLayout.invalidateLayout()
  collectionView.contentInset.top = new_inset_top
  collectionView.frame = new_frame
}

但是,收集视图未考虑新的插入,日志显示以下内容:

  

未定义UICollectionViewFlowLayout的行为,因为:   项目高度必须小于UICollectionView的高度   减去该部分可插入顶部和底部的值,减去内容   插入顶部和底部值。

如何解决此问题以使收藏夹视图正确显示?

我正在使用IGListKit

1 个答案:

答案 0 :(得分:0)

您不需要在layoutSubviews内完成所有这些操作。

<{>在viewDidLoad中实现如下操作

func viewDidLoad() {
    super.viewDidLoad()

    // let say you want 40px top inset
    collectionView.contentInset = UIEdgeInsetsMake(40, 0, 0, 0)
}

另一件事是,我不明白,为什么要在layoutSubviews中设置框架。无需设置frame即可更改contentInset