gpt4 book ai didi

ios - CollectionView EstimatedItemSize 不适用于 iOS 9 和 10

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

我遇到了 UICollectionViewFlowLayout.estimatedItemSize 的问题。问题是它不适用于 iOS 9 和 10,但适用于 iOS 11。以下是快照:

ScreenShot iOS-11 -> 这是预期的行为。

ScreenShot iOS-10 -> 由于单元格大小为零,因此此处不显示任何内容。永远不会调用 cellForItemAtIndex。

ScreenShot iOS-9 -> 与 iOS-10 相同

根据 https://developer.apple.com/videos/play/wwdc2014/226/ ,将 estimatedItemSize 设置为非零值,启动自动布局并调用 UICollectionViewCell 上的 systemLayoutSizeFitting(targetSize:horizo​​ntalFittingPriority:verticalFittingPriority:) -> CGSize 来计算大小。所以 sizeForItemAt 方法不需要实现。

滚动方向是水平

仅供引用 - 我没有使用 UICollectionViewFlowLayoutAutomaticSize 并且还没有尝试过。我不确定它是如何工作的,它只在 iOS-10 中引入。但我需要支持 iOS-9。此外,根据 wwdc2014/226 视频,将 estimatedItemSize 设置为非零值应该就足够了。

这是代码:

UICollectionViewCell:

class SingleTextCVC: UICollectionViewCell {

@IBOutlet weak var textlabel: UILabel! {
didSet {
textlabel.textColor = UIColor.black
}
}

override func awakeFromNib() {
super.awakeFromNib()
backgroundColor = UIColor.white
layer.cornerRadius = 4
clipsToBounds = true
}
}

View Controller :

class CVHorzTextAutoDimenVC: UIViewController {

@IBOutlet weak var collectionView: UICollectionView! {
didSet {
collectionView.delegate = self
collectionView.dataSource = self
collectionView.register(nib: SingleTextCVC.self)

if let _layout = collectionView.collectionViewLayout as? UICollectionViewFlowLayout {

_layout.sectionInset = UIEdgeInsets(top: 0, left: 16, bottom: 0, right: 16)
_layout.minimumInteritemSpacing = 16
_layout.estimatedItemSize = CGSize(width: 100, height: 52)
}
}
}

fileprivate var textItems: [String] = [
"Lorem",
"Lorem ipsu",
"Lorem ipsu dolor",
"Lorem ipsum dolor sit",
"Lorem ipsum dolor sit amet",
"Lorem ipsum dolor sit amet, consectetur",
"Lorem ipsum dolor sit amet, consectetur adipiscing ",
"Lorem ipsum dolor sit amet, consectetur adipiscing elit.",
"Lorem ipsum dolor sit amet, consectetur adipiscing elit. Integer",
"Lorem ipsum dolor sit amet, consectetur adipiscing elit. Integer ne."
]

override func viewDidLoad() {
super.viewDidLoad()
}
}

extension CVHorzTextAutoDimenVC : UICollectionViewDataSource, UICollectionViewDelegate {
func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
return textItems.count
}

func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
let cell = collectionView.dequeueReusableCell(withReuseIdentifier: SingleTextCVC.reuseIdentifier, for: indexPath) as! SingleTextCVC
cell.textlabel.text = textItems[indexPath.row]
return cell
}
}

请让我知道我在这里缺少什么?

为什么它只适用于 iOS-11?

这是预期的行为吗?如果是,为什么?

如果不行,解决办法是什么?

最佳答案

let layout = UICollectionViewFlowLayout() 
if #available(iOS 10.0, *) {
layout.estimatedItemSize = UICollectionViewFlowLayoutAutomaticSize
}
else {
layout.estimatedItemSize = CGSize(width: 100, height: 52)
}

关于ios - CollectionView EstimatedItemSize 不适用于 iOS 9 和 10,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47598267/

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