web-dev-qa-db-ja.com

UICollectionViewCellsがUICollectionViewに表示されない

タイトルが示すように、私はUICollectionViewをIBを通じてUIViewControllerに接続しています。 UICollectionViewという名前のimageCellサブクラスがあります。 viewcontroller viewDidLoadメソッドで、次のようにクラスを登録します。

CGRect collectionViewRect = CGRectMake(384, 60, 728, 924);
UICollectionViewFlowLayout *flow = [[UICollectionViewFlowLayout alloc] init];
imageCollectionView = [[UICollectionView alloc] initWithFrame:collectionViewRect collectionViewLayout:flow];
[imageCollectionView registerClass:[imageCell class] forCellWithReuseIdentifier:@"Cell"];
imageCollectionView.delegate = self;
imageCollectionView.dataSource = self;

次に、サービスから写真を取得するgetPhotosviewDidAppearと呼ばれるメソッド(UIの理由)を呼び出し、次にgetPhotos内の[imagCcollectionView reloadData];を呼び出します。

次に、cellForItemAtIndexPathで次のことを行います。

imageCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:@"Cell" forIndexPath:indexPath];
GRKAlbum *album = [albums objectAtIndex:indexPath.item];
cell.titleLabel.text = album.name;
return cell;

メソッドが呼び出されており、cellnilではなく、どちらもalbumではないため、ここでは何も問題が発生していません。

したがって、このコードをすべて実行すると、UICollectionViewが表示されますが、何も含まれていません。私が見ることができるのは、collectionViewの背景色だけです。どんな助けでも大歓迎です。

注:作成したimageCellクラスのXIBを作成せず、ストーリーボードを使用しています。

17
virindh

この状況をデバッグする方法はいくつかあります。

  1. customCellの代わりにICollectionViewCellクラスを登録し、cellForItem...にセルの背景色を設定します

  2. ステップでセルが表示されている場合は、独自のセルクラスを使用してその背景を設定してみてください

ストーリーボードを使用していますか?その後..

コレクションビューにセルを登録する必要はありません。プロトタイプセルを使用できます。セルに適切なIDを指定するだけです。プロトタイプセルのすべてをデザインできます。すべてのケースでカスタムクラスが必要なわけではありません。

85
Anil Varghese

ストーリーボードにセルを作成した場合は、クラスの登録ステートメントを削除するだけです。ストーリーボードでセルを作成する場合、コレクションビューまたはテーブルビューの場合は何も登録する必要はありません(実際にそうすると、問題が発生します)。行う必要があるのは、IBで識別子を設定することだけです。

45
rdelmar

同じ問題を従来のregistercell行を次の行に置き換えることで修正しました

_[self.collection registerNib:[UINib nibWithNibName:@"nibname" bundle:nil] forCellWithReuseIdentifier:identifier];
_

Swift 4.2バージョン:(Nikolay Suvandzhievに感謝)

self.collection.register(UINib(nibName: "nibname", bundle: nil), forCellWithReuseIdentifier: identifier)
16
BhushanVU

コレクションビューのセルがナビゲーションバーに隠れていることに気付いたとき、私はダミーのように感じました。ナビゲーションバー(ある場合)が、テストするコレクションビューのセルを覆っていないことを確認してください。

0
nenchev

コードで新しいコレクションビューをインスタンス化していますが、ビューを画面に追加していません。ストーリーボードを既に使用しているとのことですが、おそらく、データソースやデリゲートに接続されていないストーリーボードのコレクションビューが表示されていると思います。それか、正しいコレクションビューでreloadを呼び出していません。

ストーリーボードでコレクションビューを構成する(そして、コードで実行する必要があるすべてのことのために、それにコンセントを設定する)か、完全にコードで設定する。現時点では、2つのコレクションビューがあると思います。

0
jrturton

Xcode 6.2ストーリーボードを使用して作成しました。それが役に立てば幸い

#import <UIKit/UIKit.h>

@interface InfoSecurity : UIViewController
@property (strong, nonatomic) IBOutlet UICollectionView *tabsCV;

@end

.m
**************

#import "InfoSecurity.h"
#import "TabsCell.h"

@interface InfoSecurity ()<UICollectionViewDataSource,UICollectionViewDelegateFlowLayout>

@end

@implementation InfoSecurity

- (void)viewDidLoad {
    [super viewDidLoad];
    // Do any additional setup after loading the view.

    [self.tabsCV registerClass:[UICollectionViewCell class] forCellWithReuseIdentifier:@"TabsCell"];

}

- (NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section
{
    return 03;
}
- (NSInteger)numberOfSectionsInCollectionView:(UICollectionView *)collectionView
{
    return 01;
}
- (CGSize)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout*)collectionViewLayout sizeForItemAtIndexPath:(NSIndexPath *)indexPath
{
    return CGSizeMake(90, 50);
}
- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath
{
    NSString *reuseIdentifier = @"tabscellID";


    TabsCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:reuseIdentifier forIndexPath:indexPath];

    cell.TabTitleLabel.text= @"OPTIONS";

    return cell;

}
- (void)didReceiveMemoryWarning {
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
}
0
alvin

コレクションビューのセルが黒い場合があります(背景と同じ色、非表示、非表示は不可)。表示されているセルの再読み込みは回避策です。

0
Yao Li