Подтвердить что ты не робот

Как включить или отключить заголовки разделов в UICollectionView программно?

Как включить или отключить заголовки разделов в UICollectionView программно?

Легко сделать это легко в Storyboard (флажок), но как это сделать в коде?

4b9b3361

Ответ 1

Вы можете использовать метод collectionView:layout:referenceSizeForHeaderInSection: для UICollectionViewDelegateFlowLayout и вернуть CGSizeMake(0,0) или соответственно установить headerReferenceSize в UICollectionViewFlowLayout.

Edit: headerReferenceSize - это свойство, которое использует раскадровка для отображения/скрытия заголовков. Я добавил соответствующие строки из файла раскадровки

С флажком секции на:

 <collectionViewFlowLayout key="collectionViewLayout" minimumLineSpacing="10" minimumInteritemSpacing="10" id="xAt-Uo-bMl">
           <size key="headerReferenceSize" width="50" height="50"/></collectionViewFlowLayout>

С помощью флажка выкл

 <collectionViewFlowLayout key="collectionViewLayout" minimumLineSpacing="10" minimumInteritemSpacing="10" id="xAt-Uo-bMl">
           <size key="headerReferenceSize" width="0" height="0"/></collectionViewFlowLayout>

Изменить # 2:

От официальных документов:

Каждый раздел в макете потока может иметь собственный пользовательский верхний и нижний колонтитулы. Чтобы настроить верхний или нижний колонтитулы для представления, вы должны настроить размер верхнего или нижнего колонтитула равным нулю. Вы можете сделать это, выполнив соответствующие методы делегата или присвоив соответствующие значения свойствам headerReferenceSize и footerReferenceSize. Если размер заголовка или нижнего колонтитула равен 0, соответствующее представление не добавляется в представление коллекции.

Ответ 2

Просто измените высоту на 0 заголовков, которые вы не хотите показывать...

- (CGSize)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout*)collectionViewLayout referenceSizeForHeaderInSection:(NSInteger)section
{
    if (section == 0) {
        return CGSizeZero;
    }else {
        return CGSizeMake(collectionView.frame.size.width,50);
    }
}

Ответ 4

Существует свойство с именем "isHidden", и его можно использовать для скрытия заголовка раздела, когда это не требуется.

Пожалуйста, обратитесь к приведенному ниже коду:

func collectionView(_ collectionView: UICollectionView, viewForSupplementaryElementOfKind kind: String, at indexPath: IndexPath) -> UICollectionReusableView {
    var reusableView : UICollectionReusableView!
    if (kind == UICollectionElementKindSectionHeader) {
        let cell = collectionView.dequeueReusableSupplementaryView(ofKind: kind, withReuseIdentifier: "HeaderCell", for: indexPath) as! CVHeader
        let arrayData = summary[indexPath.section]
        cell.headerLabel.text = arrayData.first as? String
        if cell.headerLabel.text == "" {
            cell.isHidden = true //this will hide the header and leave a blank space.
        }
        reusableView = cell
    }
    if (kind == UICollectionElementKindSectionFooter) {
        reusableView = nil
    }

    return reusableView
}

Приведенный выше код скрывает заголовок секции, если текст пуст. Это отлично работает на xcode8.

Ответ 5

Когда вы просто не хотите, чтобы заголовок отображался, в делегате

viewForSupplementaryElementOfKind

Просто return [UIView new];, когда kind == UICollectionElementKindSectionHeader:

- (UICollectionReusableView *)collectionView:(UICollectionView *)collectionView viewForSupplementaryElementOfKind:(NSString *)kind atIndexPath:(NSIndexPath *)indexPath
{   
    if (kind == UICollectionElementKindSectionHeader) {
       return [UIView new]; // Or even nil, I think it would work.
    }
    ...
    return /*something else that you want to return*/ ;
}