Как включить или отключить заголовки разделов в UICollectionView программно?
Легко сделать это легко в Storyboard (флажок), но как это сделать в коде?
Как включить или отключить заголовки разделов в UICollectionView программно?
Легко сделать это легко в Storyboard (флажок), но как это сделать в коде?
Вы можете использовать метод 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, соответствующее представление не добавляется в представление коллекции.
Просто измените высоту на 0 заголовков, которые вы не хотите показывать...
- (CGSize)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout*)collectionViewLayout referenceSizeForHeaderInSection:(NSInteger)section
{
if (section == 0) {
return CGSizeZero;
}else {
return CGSizeMake(collectionView.frame.size.width,50);
}
}
Ни ниль, ни [UIView new] не работают, оба бросают ту же ошибку. Лучший ответ в Как изменить высоту профиля пользовательского интерфейса UICollectionView
Существует свойство с именем "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.
Когда вы просто не хотите, чтобы заголовок отображался, в делегате
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*/ ;
}