Заголовок заголовка заголовка сверху с прокруткой UICollectionViewFlowLayout, установленной на горизонтальную

Это дубликат этого вопроса. Я снова спрашиваю, потому что принятый ответ не работает, и никто не дает больше объяснений, как работает предполагаемый правильный ответ.

Итак, вот ситуация: я хочу отобразить представление коллекции в одну строку. Чтобы сделать это, я применил пользовательский UICollectionViewFlowLayout к представлению коллекции и установил прокрутку в горизонтальное положение. Все работает нормально, за исключением заголовка раздела.

Header disappeared

Чтобы исправить это, я реализовал эту функцию:

- (CGSize)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout*)collectionViewLayout referenceSizeForHeaderInSection:(NSInteger)section 
  {
    return CGSizeMake(350, 35);
  }

Теперь отображается заголовок, но проблема в том, что он отображается слева от ячеек, а не обычный верхний.

Я наткнулся на ссылку выше при поиске решения, но, как я уже сказал, принятый ответ вообще не работает, и я не мог найти другие решения об этой ситуации. Так может ли кто-нибудь помочь мне здесь?

Wrong header position

Ответ 1

мы можем это сделать, используя метод делегата -

(UIEdgeInsets)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout*)collectionViewLayout insetForSectionAtIndex:(NSInteger)section

и сохранение левой вставки минус значение ширины дополнительного вида и управление верхней вставкой

Ответ 2

Вы пытались использовать заголовок с чем-то вроде этого?

Сначала: установите его в viewDidLoad...

UICollectionViewFlowLayout *flowLayout = [[UICollectionViewFlowLayout alloc] init];
flowLayout.headerReferenceSize = CGSizeMake(self.collectionView.bounds.size.width, 30);
// add any other setup you need
[self.collectionView setCollectionViewLayout:flowLayout];

Во-вторых: добавьте заголовок...

#define LABEL_TAG 128

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

    UICollectionReusableView *headerView = [collectionView dequeueReusableSupplementaryViewOfKind:
                                            UICollectionElementKindSectionHeader withReuseIdentifier:@"SectionHeader" forIndexPath:indexPath];
    UILabel *label = (UILabel *)[headerView viewWithTag:LABEL_TAG];
    if (!label) {
        label = [[UILabel alloc] initWithFrame:CGRectInset(headerView.bounds, 5, 5)];
        label.tag = MY_HEADER_LABEL_TAG;
        label.font = [UIFont boldSystemFontOfSize:12];
        label.textColor = [UIColor redColor];
        [headerView addSubview:label];
    }

    label.text = [NSString stringWithFormat:@"Section %d", indexPath.section];
    return headerView;
}