Артефакт после изменения 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];
}];