gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-02 10:22:37 25 4
gpt4 key购买 nike

我有一个 collectionView 设置如下,但是在 sizeForItemAtcollectionView!.frame.size 与渲染结果不同。

注意:我只对 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 中的单元格在 View Controller 的布局完成之前加载。

当使用约束和 Collection View 时,我注意到在 viewDidAppear(:) 调用之前使用 Collection View 大小是不可靠的。

如果你想做一个相对于屏幕尺寸的网格布局,你可以在sizeForItemAt方法中使用UIScreen.main.bounds.size

在这里,您的 Collection View 似乎是 UIView 子类的 subview 。因此,如果您不能或不想使用屏幕尺寸,您还可以在其父 View 边界更改后重新加载 Collection View :

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

关于ios - 第一次加载时,UICollectionView 的大小在 sizeForItemAt 中是错误的 - 旋转后它可以工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46186086/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com