0

このコードを使用して、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;
}

しかし、あるレイアウトから別のレイアウトに変更した後、uicollectionview の背景として [0,0] indexpathed セル セットを取得しています。レイヤーの何かが台無しになっていると思われます。コール スタックを見渡すと、すべて問題ないように見えます。レイヤーをいじっている可能性のあるアニメーションの呼び出しが見当たりません。

これを無効にする方法はありますか?何が原因でしょうか?

4

1 に答える 1

0

この動作が発生する理由はわかりませんが、レイアウトを変更する前にレイアウトを無効にすると、すべてが期待どおりに機能します。

[self.collectionView performBatchUpdates:^{
            ***[self.collectionView.collectionViewLayout invalidateLayout];***
            [self.collectionView setCollectionViewLayout:self.horizontalPagingLayout animated:NO];
        } completion:^(BOOL finished) {
            [self.collectionView reloadData];
        }];
于 2013-08-26T08:50:30.320 に答える