UICollectionView如何准确获取contentSize高度

发布于 2022-09-11 23:30:12 字数 1170 浏览 13 评论 0

在tableView Cell中,嵌套了一个Collectionview。
它们都使用了AutoLayout布局,当对collectionview的Cell赋值后获取contentSize.height进行约束更新。
问题是height第一次获取时不是正确的值,而当我把Cell滑出屏幕后再回来,这个值才正确。这到底是为什么,我该怎么做?
以下是我在tableView Cell中的代码

func configModel(model: ResumeIntroduceModel?) {
        guard let model = model else { return }
        
        expLabel.text = model.experience
        typeLabel.text = model.typeStr
        homeLabel.text = model.hometown
        proLabel.text = model.profDegreeStr
        numberLabel.text = ("\(model.numberPeople ?? "0")人")
        
        tagDataArray = model.tags ?? []
        
        tagCollectionView.reloadData()
        tagCollectionView.layoutIfNeeded()
        
        let layoutContentHeight = tagCollectionView.collectionViewLayout.collectionViewContentSize.height
        print("layoutContentHeight:\(layoutContentHeight)")
        
        tagCollectionView.snp.updateConstraints { (make) in
            make.height.equalTo(layoutContentHeight)
        }
    }    

结果如下,第一次84是错误的,而滑出屏幕后再回来的47则是正确的
WX20191106-213947@2x.png

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

赠意 2022-09-18 23:30:12

这么简单的问题都没人回答吗? tableView reloadData是异步操作,
你执行tagCollectionView.reloadData()时,tagCollectionView实际上并未加载完所有item,所以contentSize拿到的也是错的
用以下伪代码试试

tagCollectionView.reloadData()
dispatch_async(dispatch_main_queue){
    let layoutContentHeight = 
    tagCollectionView.collectionViewLayout.collectionViewContentSize.height
        print("layoutContentHeight:\(layoutContentHeight)")
        
        tagCollectionView.snp.updateConstraints { (make) in
            make.height.equalTo(layoutContentHeight)
        }
}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文