Артефакт после изменения uicollectionviewlayout

Я переключаюсь между макетами в uicollectionview, используя этот код

-(void)setHorizontalLayout:(BOOL)layout
{
    if (layout == YES)
    {

        [self.collectionView performBatchUpdates:^{
            [self.collectionView setCollectionViewLayout:self.horizontalPagingLayout animated:NO];
            [self.collectionView setPagingEnabled:YES];
            self.galleryInHorizontalScrollMode = YES;
        } completion:^(BOOL finished) {
            [self.collectionView reloadData];
        }];
    }
    else {


        [self.collectionView performBatchUpdates:^{

            [self.collectionView setCollectionViewLayout:self.galleryLayout animated:NO];
            self.galleryInHorizontalScrollMode = NO;
            [self.collectionView setPagingEnabled:NO];
        } completion:^(BOOL finished) {
            [self.collectionView reloadData];
        }];
    }

    return;
}

но после перехода от одного макета к другому я получаю индексированную ячейку [0,0], заданную в качестве фона для uicollectionview. Я подозреваю, что что-то со слоем испортилось. И, глядя на стек вызовов, все выглядит хорошо. Я не вижу вызовов анимации, которые могут мешать слою.

Любой способ сделать это недействительным? что могло вызвать это?

1 ответ

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

[self.collectionView performBatchUpdates:^{
            ***[self.collectionView.collectionViewLayout invalidateLayout];***
            [self.collectionView setCollectionViewLayout:self.horizontalPagingLayout animated:NO];
        } completion:^(BOOL finished) {
            [self.collectionView reloadData];
        }];
Другие вопросы по тегам