Я пытаюсь имитировать макет UITableView с помощью UICollectionView.
layout.itemSize = CGSizeMake(CGRectGetWidth(self.view.bounds), 44.0f);
Я регистрирую класс ячейки многократного использования.
[self.collectionView registerClass:[SampleCell class]
forCellWithReuseIdentifier:NSStringFromClass([SampleCell class])];
Примечание: SampleClass
это просто подкласс UICollectionViewCell
, который ничего не содержит.
И соответствует источнику данных:
- (NSInteger)numberOfSectionsInCollectionView:(UICollectionView *)collectionView
{
return 1;
}
- (NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section
{
return 28;
}
- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath
{
UICollectionViewCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:NSStringFromClass([SampleCell class])
forIndexPath:indexPath];
return cell;
}
Я обнаружил, что SampleCell
не используется повторно.Чтобы проверить это, мы можем просто записать количество подпредставлений в UICollectionView
.
- (void)scrollViewDidScroll:(UIScrollView *)scrollView
{
NSLog(@"number of subviews in collection view is: %li", (long)self.collectionView.subviews.count);
}
И после прокрутки я получил этот журнал:
количество подпредставлений в коллекциипредставление: 30
количество подпредставлений в представлении коллекции: 30
количество подпредставлений в представлении коллекции: 30
количество подпредставлений в представлении коллекции: 30
Обратите внимание, что существует 30 подпредставлений (2 из них - индикатор прокрутки).
Это означает, что все 28 элементов отображаются без удаления невидимых ячеек из суперпредставления.Почему это происходит?
Чтобы вам было проще, я сделал пример проекта на Github.https://github.com/edwardanthony/UICollectionViewBug
Обновление:
Я также проверил выделение памяти с помощью отладчика иерархии графиков памяти, и оно выделено 28 раз.