UICollectionView大小在第一次加载时在sizeForItemAt中是错误的-旋转后可以工作

克里斯·G

我有一个的CollectionView设置为以下,但sizeForItemAtcollectionView!.frame.size不一样的渲染结果。

注意:我只使用Constraints作为collectionView的布局。

任何的想法?

public override init(frame: CGRect){
    super.init(frame: frame)

    self.translatesAutoresizingMaskIntoConstraints = false

    let layout: UICollectionViewFlowLayout = UICollectionViewFlowLayout()
    layout.minimumInteritemSpacing = 0
    layout.minimumLineSpacing = 0
    layout.scrollDirection = .vertical

    self.collectionView = UICollectionView(frame: self.frame, collectionViewLayout: layout)
    self.addSubview(self.collectionView!)
    self.collectionView?.translatesAutoresizingMaskIntoConstraints = false
    self.collectionView!.delegate = self
    self.collectionView!.dataSource = self
    self.collectionView!.register(UICollectionViewCell.self, forCellWithReuseIdentifier: "cellIdentifier")

}

public func collectionView(_ collectionView: UICollectionView,
                                   layout collectionViewLayout: UICollectionViewLayout,
                                   sizeForItemAt indexPath: IndexPath) -> CGSize {

    collectionView!.frame.size // Tot the size of the rendered collectionView, and therefore unable to give the cell the right size???
}
打破

发生这种情况的原因是,您的单元格UICollectionView是在视图控制器的布局完成之前加载的。

使用约束和集合视图时,我注意到在viewDidAppear(:)调用之前使用集合视图大小是不可靠的

如果要相对于屏幕尺寸进行网格布局,则可以UIScreen.main.bounds.size在该sizeForItemAt方法中使用

在这里,您的集合视图似乎是子UIView的子视图因此,如果您不能使用屏幕尺寸,也可以在更改其视图范围后重新加载集合视图:

override var bounds: CGRect {
        didSet {
            if oldValue != bounds {
                self.collectionView?.reloadData()
            }
        }
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

UITableviewCell 中的 UICollectionView 第一次给出错误的 contentSizeHeight 但滚动后变为 true

第一次旋转后SnapSVG旋转问题

第一次后无法更改窗口大小

服务工作者在第一次加载时获取事件

Tkinter程序在第一次尝试时无法正常运行,重新启动后可以正常工作

当点击元素时,ajax请求第一次加载数据,第一次后阻止ajax请求

第一次保存后发生TransientObjectException错误

第一次 cout 后的错误值

第一次输入错误后如何检查输入是否与列表中的项目相同?

Javascript / JQuery在第一次加载时加载当前日期,但在更改页面后保存日期

mysql 在第一次后工作正常

我的 PyCFunction 第一次工作,但在连续迭代后导致段错误

在同一 div 上重新加载 rGrpah 图表时,X 轴标题在第一次后消失

用户在第一次单击后应关闭表单时可以多次单击按钮

如何在请求后保存变量的值,但在第一次加载时却具有不同的值?

如果单击函数中的语句在第一次单击后无法按预期工作

GWT应用程序不是第一次在IE中加载,但刷新后可以很好地加载

为什么第一次尝试时不显示错误消息,但对另一个可以正常工作?

Nuxtjs - 在 Safari 上第一次 SSR 加载失败后在 asyncData 中调用 Axios API

第一次迁移后更改字段名称时,Rails数据库迁移中止错误

在Mozilla中,第一次将css关键帧悬停时,第二次可以正常工作

延迟后(仅一次)或第一次加载页面上的 iFrame 后滚动到页面顶部

UICollectionView第一次加载时明显滞后

SpeechSynthesis 在 FireFox 中第一次发声后停止工作,但在 Chrome 中工作

在 FormFlow Bot Framework 中第一次错误尝试后,我如何验证并提供选项列表

响应式 Google 图表仅在第一次调整大小后显示

为什么图像旋转动画只能在第一次正常工作

只有当我第一次右键单击它时,datagrid中的组合框才能工作

AdsConnection 在第二次连接时抛出 EntryPointNotFoundException 但第一次工作