1

Перво-наперво:Как Обновить UICollectionView Дополнительный вид (HeaderView)

  1. Я не хочу, чтобы перезагрузить всю CollectionView.
  2. Я также НЕ хочу перезагружать раздел (так как он такой же, как reloadData, потому что у моего CV есть только 1 раздел).

Я положил некоторые элементы управления в Дополнительной View, поскольку эта точка зрения выступает как вид заголовка. В каком-то случае я хочу скрыть/показать элементы управления по мере необходимости. Для этого мне нужно перезагрузить Дополнительный вид, поскольку данные для него уже обновлены.

То, что я пробовал:

UICollectionViewLayoutInvalidationContext *layoutContext = 
[[UICollectionViewLayoutInvalidationContext alloc] init]; 
[layoutContext invalidateSupplementaryElementsOfKind:UICollectionElementKindSectionHeader 
             atIndexPaths:@[[NSIndexPath indexPathForRow:0 inSection:0]]]; 
[[_collectionView collectionViewLayout] invalidateLayoutWithContext:layoutContext]; 

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

Спасибо.

ответ

-1

Я не уверен, как вы сгруппировали ячейки коллекции.

Самым простым решением было бы перезагрузить конкретную ячейку с помощью:

- (void)reloadItemsAtIndexPaths:(NSArray *)indexPaths 
+0

Это только перезаряжает нормальную ячейку. Я хочу перезагрузить дополнительное представление. Извините, я отредактировал мой вопрос, чтобы указать addaryview – GeneCode

+0

В этом случае, возможно, вы можете выполнять итерацию по всем subviews в вашем uicollectionview и setNeedsDisplay только на headerView. Вы можете использовать свойство тега для идентификации headerView – diOS

+0

setNeedsdisplay не перезагружает представление. он просто освежает его. – GeneCode

1

Если вам нужно только обновить представление заголовка конкретного раздела, то вы можете сделать что-то похожее на это:

if let header = collectionView.supplementaryView(forElementKind: UICollectionElementKindSectionHeader, at: IndexPath(item: 0, section: indexPath.section)) as? MyCollectionHeaderView { 
    // Do your stuff here 
    header.myLabel.isHidden = true // or whatever 
} 

Фрагмент кода IndexPath(item: 0, section: indexPath.section) может показаться немного странным, но оказывается, что supplementaryView возвращается только по первому элементу раздела.