collectionViewContentSize in iOS 10 using self-sizing cells

后端 未结 4 1270
你的背包
你的背包 2021-02-08 13:05

Prior to iOS 10, I had a self-sizing table view that solely consisted of a UICollectionView with self-sizing cells using a standard UICollectionViewFlowLayout. The collection v

相关标签:
4条回答
  • 2021-02-08 13:27

    This is some strange bug in iOS10 with iPhone Plus devices only. I've faced the same issue, my solution was to call layoutIfNeeded like this:

    func numberOfSections(in collectionView: UICollectionView) -> Int {
        collectionView.layoutIfNeeded() // Patch: only to solve UIKit crash on Plus models
        return 1
    }
    

    Doing the same thing in different UICollectionViewDataSources methods will work as well

    0 讨论(0)
  • 2021-02-08 13:27

    In my case, calling invalidateLayout before layout is a workaround for this issue.

    In a UIViewController subclass:

    override func viewWillLayoutSubviews() {
        super.viewWillLayoutSubviews()
        collectionView.collectionViewLayout.invalidateLayout()
    }
    

    or in a UIView subclass:

    override func layoutSubviews() {
        super.layoutSubviews()
        collectionView.collectionViewLayout.invalidateLayout()
    }
    
    0 讨论(0)
  • 2021-02-08 13:37

    I got same issue when develop my app on iOS 10. Remove the first line solved my problem.

    self.collectionView.frame = CGRectMake(0, 0, targetSize.width, FLT_MAX); //Remove this

    Hope this help!

    0 讨论(0)
  • 2021-02-08 13:50

    I got same issue when develop my app on iOS 10 and set UICollectionViewDataSource to itself on awakeFromNib,like this:

    override func awakeFromNib() {
        super.awakeFromNib()
        let layout = UICollectionViewFlowLayout()
        // set your layout 
        collectionViewLayout = layout
        // set dataSource equal to self in here cause a crash
        dataSource = self
    }
    

    then I move the UICollectionViewDataSource setting code to layoutSubviews,the problem solved,like this:

    override func layoutSubviews() {
            super.layoutSubviews()
            dataSource = self
        }
    
    override func awakeFromNib() {
        super.awakeFromNib()
        let layout = UICollectionViewFlowLayout()
        // set your layout 
        collectionViewLayout = layout
        // set dataSource equal to self in here cause a crash
        dataSource = self
    }
    

    Hope this help!

    0 讨论(0)
提交回复
热议问题