0

UICollectionViewFlowLayout.estimatedItemSizeで問題が発生しています。問題は、iOS 9 & 10では正常に動作しませんが、iOS 11では問題なく動作します。CollectionView EstimatedItemSizeがiOS 9および10で動作しない

ScreenShot iOS-11 - >これは予想される動作です。

ScreenShot iOS-10 - >セルサイズがゼロのため、ここには何も表示されません。 cellForItemAtIndexは呼び出されません。

ScreenShot iOS-9 - ゼロ以外の値にestimatedItemSizeを設定https://developer.apple.com/videos/play/wwdc2014/226/によると、iOSの-10

で同じ>、 は、自動レイアウトがでキックすることができますし、systemLayoutSizeFitting(はTargetSize呼び出します:horizo​​ntalFittingPriority:verticalFittingPriorityを: ) - > CGSize UICollectionViewCellでサイズを計算します。したがって、sizeForItemAtメソッドを実装する必要はありません。

スクロール方向はです。水平です。

FYI - 私は使用していませんUICollectionViewFlowLayoutAutomaticSizeまだ試していません。どのように動作するのかよく分からず、iOS-10でしか紹介されていません。しかし、私はiOS-9をサポートする必要があります。また、wwdc2014/226ビデオによると、estimatedItemSizeを0以外の値に設定すれば十分です。

これはコードです:

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 
    } 
} 

のViewController:

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でのみ動作しますか?

これは予想される動作ですか。はいの場合、なぜですか?

そうでない場合、解決策は何ですか?

+0

動作しません。このリンクhttps://stackoverflow.com/questions/25895311/uicollectionview-self-sizing-cells-with-auto-layout –

答えて

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

を確認してください。既に試しました。 – user2601981

関連する問題