【问题标题】:Changing frame and contentInset of UICollectionView in layoutSubviews() using IGListKit使用 IGListKit 在 layoutSubviews() 中更改 UICollectionView 的 frame 和 contentInset
【发布时间】:2019-07-13 15:46:55
【问题描述】:

我需要更改我的收藏视图(UICollectionView)的frame 和顶部内容插入(contentInset.top)。顶部 inset 和 frame 的变化取决于 superview 的边界和 collection view 的内容偏移量,因此我将 inset 更改代码放在 layoutSubviews() 中。

override func layoutSubviews() {
  super.layoutSubviews()

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

但是,集合视图不考虑新的插图,并且日志显示以下内容:

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

如何解决此问题以让集合视图正确显示?

我正在使用 IGListKit

【问题讨论】:

    标签: ios swift uicollectionview iglistkit


    【解决方案1】:

    您无需在layoutSubviews 内执行所有这些操作。

    viewDidLoad 中实现如下

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

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

    【讨论】:

    • 我已经更新了我的问题。就我而言,内容插图不是固定值。它的变化取决于superview的边界和collection view的内容偏移量。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-25
    • 2013-08-27
    • 2019-05-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多