• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

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

[复制链接]
菜鸟教程小白 发表于 2022-12-11 19:23:40 | 显示全部楼层 |阅读模式 打印 上一主题 下一主题

我遇到了 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?

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

如果没有,解决办法是什么?



Best Answer-推荐答案


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/

回复

使用道具 举报

懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关注0

粉丝2

帖子830918

发布主题
阅读排行 更多
广告位

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap