web-dev-qa-db-ja.com

cellForItemAtIndexPathは呼び出されませんが、numberOfItemsInSectionは呼び出されます

これは重複した投稿の可能性がありますが、次のいずれにも解決策が見つかりませんでした。

enter image description here

UICollectionViewを次のように設定しています:

_UINib *nib = [UINib nibWithNibName:@"CollectionViewCell"
                           bundle:[NSBundle mainBundle]];
[_collectionView registerNib: nib forCellWithReuseIdentifier:@"bCell"];
_

(私は、委任なしで、委任を設定しようとしました)。

しかし、その後、のみ

- (NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section

- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPathはしません。

numberOfItemsInSectionをチェックしましたが、常に0を超えています(正確には17です)。

_[_collectionView reloadData];_を呼び出すようにチェックしましたが、何も起こりません。

私はさまざまなことを試してみましたが、機能させることはできません。

さらに、私のUICollectionViewはここにあるはずですが、そうではありません:

enter image description here

誰にも手がかりがありますか?ありがとうございました。

47

これは今後の問題に役立つと思います...

StoryBoardの制約が原因でした。水平方向のスペースを修正したばかりだったので、なぜそれが起こるのか本当に理解していません。そのビューの制約として水平スペースを削除しましたが、すべて正常に機能します。

さて、人生の流れをしましょう。

40

私も同じ問題に直面し、collectionViewLayoutに間違ったクラスオブジェクトを渡したことを最終的に知りました。オブジェクトの作成中にUICollectionViewLayoutの代わりにUICollectionViewFlowLayoutに変更しますUICollectionViewの場合、以下のように、すべてのデリゲートメソッドを呼び出します。

 collectionView = UICollectionView(frame: CGRectMake(5, 0, 400, 40) , collectionViewLayout: UICollectionViewFlowLayout())
16
Narayana

これをviewDidLoadに追加します。

self.automaticallyAdjustsScrollViewInsets = NO;
15
reza_khalafi

1。 numberOfItemsInSectionメソッドで0個以上のアイテムを返すと、cellForItemAtIndexPathが呼び出されます。

2。 UICollectionViewFlowLayoutが正しいか、独自のものであることを確認してください。 ICollectionViewLayout は直接使用できない抽象クラスです

3。コレクションビューのセルとコレクションビューのサイズを確認します。

4。コードでコレクションビューのサイズを設定してみてください。[yourCollectionViewFlowLayout setItemSize:CGSizeMake(200、200)];

5。それらのいずれかが機能しない場合は、XCodeを強制終了して再起動します。時々それは問題を解決します。

アップルは言う

UICollectionViewLayoutクラスは、サブクラスであり、コレクションビューのレイアウト情報を生成するために使用する抽象基本クラスです。レイアウトオブジェクトの役割は、コレクションビューの境界内のセル、補助ビュー、および装飾ビューの配置を決定し、求められたときにその情報をコレクションビューに報告することです。コレクションビューは、提供されたレイアウト情報を対応するビューに適用して、画面上に表示できるようにします。

UICollectionViewLayoutを使用するには、サブクラス化する必要があります。ただし、サブクラス化を検討する前に、UICollectionViewFlowLayoutクラスを見て、レイアウトのニーズに適合できるかどうかを確認する必要があります。

私もこの問題に直面しています。考えられるすべての問題を確認しましたが、すべて問題ありません。次に、リロード方法を変更しようとしました。

[self.colView reloadData]-> [self.collectionView reloadSections:[NSIndexSet indexSetWithIndex:x]];

その後、すべてがうまくいきました。しかし、まだ方法がわかりません。

12
frank

少なくとも1つのセルの高さがゼロである限り、cellForItemAtIndexPathのNONEが(iOS 10で)呼び出されることがわかりました。

免責事項:これがコメントである場合は申し訳ありません-十分な評判。

7
KiRviz

私にとって、cellForItemAtIndexPathは、collectionViewの制約を0に設定してから実際のサイズに再度設定した後、初めて呼び出されません。

 @IBOutlet weak var collectionVwHeightContraint: NSLayoutConstraint!
 if attachments.count > 0 {

     collectionVwHeightContraint.constant = 100
 }else {

     collectionVwHeightContraint.constant = 0
 }
 // collectionVwHeightContraint is my collectionView height Contraint outlet

私はこれを呼び出すことで解決しました:

self.view.layoutIfNeeded()

それが誰かを助けることを願っています:)

3
Ariven Nadar

私を助けたのは、正しいitemSizeを設定することでした。私のcellForItemAtIndexPathは、高さが間違っていたために呼び出されていませんでした。

そこで、サイズを次のように設定します。

[self.myCollectionViewFlowLayout setItemSize:CGSizeMake(170, 300)];
1
Luiz Dias

私にとって問題は、プログラムでコレクションビューを作成していたが、フレームとしてCGRectZeroを指定していたことでした。 viewDidLoadの後に自動レイアウトを使用してレイアウトしていました。 View Controllerのロード中にコレクションビューをレイアウトすると、cellForItemAtIndexPath:正しく。

1
Liron Yahdav

私にとっては、collectionViewのコンテナにtranslatesAutoresizingMaskIntoConstraints = false

0
Jeremy Kelleher

私の場合、カスタムセルラベルの制約が台無しになりました。もう一度制約を確認してください。

0
Madhurya Gandi

ストーリーボードのコレクションビューアウトレットでも、「標準」の制約(ボトム、トップ、リーディング、トレーリングがインナービューに固定されている)で同じ問題が発生しました。

私はこの方法で解決しました:

let layout: UICollectionViewFlowLayout = UICollectionViewFlowLayout()
layout.itemSize = self.collectionView.frame.size
0
Luca Davanzo

私は同様の問題に直面していました。問題はセクションのnumberOfItemsにありました。セクションの数またはセクション内の行の数が0未満の場合、cellForRowAtIndexPathが呼び出されない場合があります。

0
iPhoneDeveloper