-1

我想爲我的UICollectionView設置UICollectionViewLayout,但是當設置圖層時,函數cellForItemAt不會被調用。我不明白爲什麼。 我UICollectionView是在廈門國際銀行,與此代碼用於測試UICollectionViewLayout:當設置了UICollectionViewLayer時,cellForItemAt不叫

required init?(coder aDecoder: NSCoder) 
{ 
    super.init(coder: aDecoder) 
    xibSetup() 

    self.collectionView.register(UINib(nibName: "StepCell", bundle: nil), forCellWithReuseIdentifier: stepCellIdentifier) 
    self.collectionView.delegate = self 
    self.collectionView.dataSource = self 
} 

func numberOfSections(in collectionView: UICollectionView) -> Int { 
    return 3 
} 

func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int { 
    return 100 
} 

func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell { 
    if let lCell = collectionView.dequeueReusableCell(withReuseIdentifier: stepCellIdentifier, for: indexPath) as? StepCell { 
     lCell.text.text = indexPath.row.description 
     return lCell 
    } 
    return UICollectionViewCell() 
} 

我在另一個廈門國際銀行的自定義UICollectionViewCell這是我UICollectionViewLayout類:

class DetailGroupCollectionviewLayout: UICollectionViewLayout { 
    let CELL_HEIGHT = 30.0 
    let CELL_WIDTH = 100.0 

    var cellAttrsDictionary = Dictionary<IndexPath,UICollectionViewLayoutAttributes>() 
    var contentSize = CGSize.zero 

    override var collectionViewContentSize: CGSize { 
     return self.contentSize 
    } 

    override func prepare() { 
     if let lCollectionView = self.collectionView { 
      if lCollectionView.numberOfSections > 0 { 
       for section in 0...lCollectionView.numberOfSections - 1 { 
        if lCollectionView.numberOfItems(inSection: section) > 0 { 
         for item in 0...lCollectionView.numberOfItems(inSection: section) - 1 { 
          let cellIndex = IndexPath(item: item, section: section) 
          let xPos = Double(item) * CELL_WIDTH 
          let yPos = Double(section) * CELL_HEIGHT 

          let cellAttributes = UICollectionViewLayoutAttributes(forCellWith: cellIndex) 
          cellAttributes.frame = CGRect(x: xPos, y: yPos, width: CELL_WIDTH, height: CELL_HEIGHT) 
          cellAttributes.zIndex = 1 

          cellAttrsDictionary[cellIndex] = cellAttributes 
         } 
        } 
       } 
      } 
     } 
    } 
} 

我已經試過有關於故事板中的UICollectionView的所有內容,因爲我認爲xib「bug」但是這不會解決任何問題。

有一件事情我不正確或特殊?我迷路了。

我上的Xcode 8.3雨燕3.1與我的應用程序是iOS上的10

回答

0

我找到解決辦法,我的自定義UICollectionViewLayout沒有contentSize,我說這在我的準備()函數:

let contentWidth = Double(collectionView!.numberOfSections) * CELL_WIDTH 
let contentHeight = Double(collectionView!.numberOfItems(inSection: 0)) * CELL_HEIGHT 
self.contentSize = CGSize(width: contentWidth, height: contentHeight) 

This is the result

0

你確定你的ReuseIdentifier是正確的?你是否嘗試過,如果它在裏面,如果讓這裏? (帶有打印語句或斷點)?

func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell { 
    if let lCell = collectionView.dequeueReusableCell(withReuseIdentifier: stepCellIdentifier, for: indexPath) as? StepCell { 
     lCell.text.text = indexPath.row.description 
     return lCell 
    } 
    return UICollectionViewCell() 
} 

不能確定它可能是什麼,如果你可以分享你的項目,或它的一部分,我會很樂意嘗試用你看着辦吧。此外,請確保您符合UICollectionViewDataSourceUICollectionViewDelegate

0

您是否將該委託歸屬於viewController?這可能是一種可能性。 (如果你沒有,「numberOsSections」也不會被調用

0

ReuseIdentifier是正確的問題是,cellForItemAt不會調用只是當我添加UICollectionViewLayout,當沒有設置, UICollectionView完美運行。

Without UICollectionViewLayout

With UICollectionViewLayout

東西我忘了告訴你,不要緊,當UICollectionViewLayout設置與否,我xibController進入「numberOfItemsInSection」和「numberOfSections」不,只有當UICollectionViewLayout被設置,con troller沒有傳遞到cellForItemAt

相關問題