0

UICollectionViewFlowLayout.estimatedItemSize에 문제가 있습니다. 문제는 iOS 9 & 10에서는 작동하지 않지만 iOS 11에서는 정상적으로 작동한다는 것입니다. 다음은 스냅 샷입니다.CollectionView EstimatedItemSize가 iOS 9 및 10에서 작동하지 않습니다.

ScreenShot iOS-11 -> 이것은 예상되는 동작입니다.

ScreenShot iOS-10 -> 셀 크기가 0이므로 여기에 아무 것도 표시되지 않습니다. cellForItemAtIndex는 호출되지 않습니다.

ScreenShot iOS-9 - 아이폰 OS-10

따르면 https://developer.apple.com/videos/play/wwdc2014/226/에, 이 0이 아닌 값으로 estimatedItemSize을 설정하는 등> 동일의 자동 레이아웃은 킥하게하고 systemLayoutSizeFitting (targetSize가 호출 horizontalFittingPriority : verticalFittingPriority를 ​​:) -> CGSize UICollectionViewCell에서 크기를 계산하십시오. 그래서 sizeForItemAt 메소드를 구현할 필요가 없습니다.

스크롤 방향은 가로입니다.

참고 - 사용하고 있지 않습니다. 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