Как перезагрузить только видимые разделы UICollectionView?

Я пытаюсь изменить количество элементов в разделе в зависимости от ориентации устройства.

Я добился этого, перезагрузив представление всей коллекции в viewWillTransitionToSize и изменив количество «максимально допустимых элементов в разделе» в количестве разделов в UICollectionView.

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


person SanjayPathak    schedule 27.10.2016    source источник
comment
Вы получаете indexPaths видимых элементов collectionView. Вы пробовали это?   -  person Adeel    schedule 27.10.2016
comment
На самом деле все равно перезагружаются только видимые элементы   -  person vadian    schedule 27.10.2016
comment
Я пробовал это @Adeel -(void)reloadVisibleSections { NSMutableIndexSet *visibleSections = [NSMutableIndexSet indexSet]; NSArray *arr = [[self.collectionView indexPathsForVisibleItems] valueForKey:@section]; for(NSNumber *index in arr) { [visibleSections addIndex:[index unsignedIntegerValue]]; } [self.collectionView reloadSections:visibleSections]; } Что падает, когда мы поворачиваем устройство, возможно, из-за того, что количество видимых разделов увеличивается, когда я перехожу от альбомной ориентации к портретной.   -  person SanjayPathak    schedule 28.10.2016
comment
@SanjayPathak, пожалуйста, обновите свой вопрос, указав код и журнал сбоев.   -  person Adeel    schedule 28.10.2016


Ответы (2)


Вы можете перезагрузить определенный раздел, используя приведенный ниже код:

let table = UITableView()
let index = IndexSet.init(integer: 0) //The section to reload
table.reloadSections(index, with: UITableViewRowAnimation.automatic)

Если вы хотите сделать это в зависимости от ваших видимых разделов, вам нужно будет получить видимые ячейки следующим образом: table.visibleCells

И создайте индексы раздела для перезагрузки из этих видимых ячеек.

let table = UITableView()
var indexes = IndexSet()
let visibleCells = table.visibleCells
for cell in visibleCells {
    indexes.insert((table.indexPath(for: cell)?.section)!)
}
table.reloadSections(indexes, with: UITableViewRowAnimation.automatic) 
person Fran Martin    schedule 27.10.2016

    NSSet *visibleSections = [NSSet setWithArray:[[self.tableView indexPathsForVisibleRows] valueForKey:@"section"]];

//Перезагрузка раздела

[self.myCollectionView reloadSections:visibleSections];

person Matloob Hasnain    schedule 27.10.2016
comment
приведенный выше код хорош для tableView. Для collectionView -(void)reloadVisibleSections { NSMutableIndexSet *visibleSections = [NSMutableIndexSet indexSet]; NSArray *arr = [[self.collectionView indexPathsForVisibleItems] valueForKey:@section]; for(NSNumber *index in arr) { [visibleSections addIndex:[index unsignedIntegerValue]]; } [self.collectionView reloadSections:visibleSections]; } Который вылетает, когда мы поворачиваем устройство. - person SanjayPathak; 28.10.2016