UICollectionViewFlowLayoutestimatedItemSize 不适用于 iOS12,尽管它适用于 iOS 11.* [英] UICollectionViewFlowLayout estimatedItemSize does not work properly with iOS12 though it works fine with iOS 11.*

查看:49
本文介绍了UICollectionViewFlowLayoutestimatedItemSize 不适用于 iOS12,尽管它适用于 iOS 11.*的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

对于我们使用的 UICollectionView 的动态高度单元格,

For UICollectionView's dynamic height cells we use,

if let layout = self.collectionViewLayout as? UICollectionViewFlowLayout {
    layout.estimatedItemSize = UICollectionViewFlowLayoutAutomaticSize
}

通过适当的高度和宽度约束,它适用于 iOS 11.* 版本,但它会中断并且不会使 iOS 12.0 的单元格动态

with the proper constraint of height and width, it works fine with iOS 11.* versions but it breaks and does not make the cells dynamic for iOS 12.0

推荐答案

就我而言,我通过向单元格的 contentView 显式添加以下约束来解决此问题.

In my case, I solved this by explicitly adding the following constraints to the cell's contentView.

class Cell: UICollectionViewCell {
    // ...

    override func awakeFromNib() {
        super.awakeFromNib()

        // Addresses a separate issue and prevent auto layout warnings due to the temporary width constraint in the xib.
        contentView.translatesAutoresizingMaskIntoConstraints = false

        // Code below is needed to make the self-sizing cell work when building for iOS 12 from Xcode 10.0:
        let leftConstraint = contentView.leftAnchor.constraint(equalTo: leftAnchor)
        let rightConstraint = contentView.rightAnchor.constraint(equalTo: rightAnchor)
        let topConstraint = contentView.topAnchor.constraint(equalTo: topAnchor)
        let bottomConstraint = contentView.bottomAnchor.constraint(equalTo: bottomAnchor)
        NSLayoutConstraint.activate([leftConstraint, rightConstraint, topConstraint, bottomConstraint])
    }
}

这些约束已经在单元的 xib 中就位,但不知何故它们对于 iOS 12 来说还不够.

These constraints are already in place inside the xib of the cell, but somehow they aren't enough for iOS 12.

建议在不同地方调用 collectionView.collectionViewLayout.invalidateLayout() 的其他线程在我的情况下没有帮助.

The other threads that suggested calling collectionView.collectionViewLayout.invalidateLayout() in various places didn't help in my situation.

此处的示例代码:https://github.com/larrylegend/CollectionViewAutoSizingTest

这将解决方法应用于 https://medium.com/@wasinwiwongsak/uicollectionview-with-autosizing-cell-using-autolayout-in-ios-9-10-84ab5cdf35a2:

This applies the workaround to code from a tutorial by https://medium.com/@wasinwiwongsak/uicollectionview-with-autosizing-cell-using-autolayout-in-ios-9-10-84ab5cdf35a2:

这篇关于UICollectionViewFlowLayoutestimatedItemSize 不适用于 iOS12,尽管它适用于 iOS 11.*的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆