1. ホーム
  2. ios

[解決済み] UICollectionReusableView メソッドが呼び出されない

2023-03-30 19:42:56

質問

セクションを UICollectionView に、画像付きのヘッダを持たせたい。

私は以下の手順で行いました。

  • のアクセサリーとしてヘッダーを割り当てました。 UICollectionView
  • に識別子を付けました。
  • のサブクラスを作成しました。 UICollectionReusableView を作成しました。
  • は、ストーリーボードでカスタムクラスを割り当てました。
  • を置く。 ImageView をヘッダアクセサリに
  • のアウトレットを作りました。 ImageView のカスタムクラスで .h ファイル
  • で以下を実装。 viewDidLoad :

[self.collectionView registerClass:[ScheduleHeaderView class] forSupplementaryViewOfKind:UICollectionElementKindSectionHeader withReuseIdentifier:headerIdentifier];

-(UICollectionReusableView *)collectionView:(UICollectionView *)collectionView viewForSupplementaryElementOfKind:(NSString *)kind atIndexPath:(NSIndexPath *)indexPath
{
    UICollectionReusableView *reusableview = nil;

    if (kind == UICollectionElementKindSectionHeader)
    {
        ScheduleHeaderView *headerView = [collectionView dequeueReusableSupplementaryViewOfKind:UICollectionElementKindSectionHeader withReuseIdentifier:headerIdentifier forIndexPath:indexPath];

        headerView.headerImageView.image = [UIImage imageNamed:@"blah.png"];

        reusableview = headerView;
    }

    return reusableview;
}

すべてのセルとそのセクションを見ることができるので、データソースとデリゲートメソッドが動作していることは分かっています。しかし、私はヘッダーを持っていません。私は上記のメソッドにブレークポイントを入れましたが、それは決して呼び出されていません。

私は何を間違えているのでしょうか?

どのように解決するのですか?

ヘッダーに0以外のサイズを与える必要があるようです。 collectionView:viewForSupplementaryElementOfKind:atIndexPath は呼び出されないようです。ですから headerReferenceSize プロパティを設定します。

flowLayout.headerReferenceSize = CGSizeMake(self.collectionView.frame.size.width, 100.f);

Swift 5+

flowLayout.headerReferenceSize = CGSize(CGSize(width: self.collectionView.frame.size.width, height: 100))

を実装するか、あるいは collectionView:layout:referenceSizeForHeaderInSection を実装してください。