Проблема с нижним колонтитулом UICollectionView

#ios #objective-c #uicollectionview

#iOS #objective-c #uicollectionview

Вопрос:

Я пытаюсь добавить нижний колонтитул в представление моей коллекции, но он сбой с 'the view returned from -collectionView:viewForSupplementaryElementOfKind:atIndexPath (UICollectionElementKindSectionFooter,<NSIndexPath: 0xc000000000000016> {length = 2, path = 0 - 0}) was not retrieved by calling -dequeueReusableSupplementaryViewOfKind:withReuseIdentifier:forIndexPath: or is nil ((null))'

В viewDidLoad:

 [self.collectionView registerClass:[FooterView class]forSupplementaryViewOfKind:UICollectionElementKindSectionFooter withReuseIdentifier:@"FooterView"];
  

Вот мой код.

 - (UICollectionReusableView *)collectionView:(UICollectionView *)collectionView viewForSupplementaryElementOfKind: (NSString *)kind atIndexPath: (NSIndexPath *)indexPath {

    UICollectionReusableView *reusableView = nil;

    if (kind == UICollectionElementKindSectionFooter) {
        FooterView *footerView = [collectionView dequeueReusableSupplementaryViewOfKind:kind withReuseIdentifier:@"FooterView" forIndexPath:indexPath];

        CGFloat width = footerView.frame.size.width;
        UIColor *kfbBlue = [UIColor colorWithRed:8.0/255.0f green:77.0/255.0f blue:139.0/255.0f alpha:1];

        UIButton *moreButton = [UIButton buttonWithType:UIButtonTypeRoundedRect];
        moreButton.backgroundColor = [UIColor clearColor];
        [moreButton setTitle:@"More" forState:UIControlStateNormal];
        [moreButton setTitleColor:kfbBlue forState:UIControlStateNormal];
        moreButton.titleLabel.textAlignment = NSTextAlignmentCenter;
        moreButton.titleLabel.font = [UIFont fontWithName:@"FranklinGothicStd-ExtraCond" size:25.0];
        moreButton.frame = CGRectMake(width / 2 - 25, 0, 50, 50);
        moreButton.layer.cornerRadius = 25.0;
        moreButton.layer.borderWidth = 2.0f;
        moreButton.layer.borderColor = kfbBlue.CGColor;
        moreButton.clipsToBounds = YES;
        moreButton.backgroundColor = [UIColor clearColor];
        [moreButton addTarget:self action:@selector(loadMoreImages) forControlEvents:UIControlEventTouchUpInside];
        [footerView addSubview:moreButton];

        if (loaded == YES) {
            reusableView = footerView;
        }
    }

    return reusableView;
}
  

Комментарии:

1. Вы регистрировались FooterView в UICollectionView с помощью registerClass:forSupplementaryViewOfKind:withReuseIdentifier: или с помощью непосредственно в раскадровке?

2. Я только что добавил его и обновил свой вопрос, чтобы отразить другое сообщение об ошибке.

3. Что такое «загруженное» значение? У вас это не указано в предоставленном вами фрагменте. Однако, я думаю, вам это там не нужно 🙂

4. Какова цель if (loaded ==YES) { ? Вы не можете выбрать возврат nil в этом методе, это вызовет исключение. Если вы не хотите иметь нижний колонтитул в каком-либо случае, вернитесь CGSizeZero из referenceSizeForFooterInSection метода в этом случае.

5. Удаление кода для loaded решило проблему.