gpt4 book ai didi

ios - UICollectionView performBatchUpdates 导致 collectionview 在旋转设备时错位

转载 作者:可可西里 更新时间:2023-11-01 04:02:34 24 4
gpt4 key购买 nike

如果我旋转设备而 collectionview performBatchUpdate 和 reloadItemsAtIndexPaths , Collection View 将错位。但 View 仍将保持不变。

简单地解决这个问题:

setting [UIView setAnimationEnabled: NO]; in willRotateToInterfaceOrientation
+
setting [UIView setAnimationEnabled: YES]; in didRotateToInterfaceOrientation

但我认为这不是解决这个问题的好方法。

有没有人有更好的主意?

干杯。

这是我的代码:

    - (void)willRotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration{
[super willRotateToInterfaceOrientation:toInterfaceOrientation duration:duration];
NSLog(@"Before Rotation");
NSLog(@"collecitonview Rect : %@", NSStringFromCGRect(self.collectionView.frame));
NSLog(@"view Rect : %@", NSStringFromCGRect(self.view.frame));
}

- (void)didRotateFromInterfaceOrientation:(UIInterfaceOrientation)fromInterfaceOrientation{
[super didRotateFromInterfaceOrientation:fromInterfaceOrientation];
NSLog(@"After Rotation");
NSLog(@"collecitonview Rect : %@", NSStringFromCGRect(self.collectionView.frame));
NSLog(@"view Rect : %@", NSStringFromCGRect(self.view.frame));
}

- (void) viewDidAppear:(BOOL)animated{
[super viewDidAppear:animated];
for(int i = 0 ; i < 30; i++){
NSBlockOperation *operation = [NSBlockOperation blockOperationWithBlock:^{
CGFloat hue = arc4random() % 20;
[self.collectionView reloadItemsAtIndexPaths:@[[NSIndexPath indexPathForItem:hue inSection:0]]];
}];
[_operationsArray addObject:operation];
}
[self performUpdate];
}

- (void)performUpdate{

if(_operationsArray.count == 0)return;

[self.collectionView performBatchUpdates:^{
NSBlockOperation *operation = (NSBlockOperation*)[_operationsArray firstObject];
[operation start];
} completion:^(BOOL finished) {
if(_operationsArray.count != 0){
[_operationsArray removeObjectAtIndex:0];
[self performUpdate];
}
}];
}

输出:(如果我在执行更新期间旋转了设备)

2013-10-16 17:05:18.445 collectionviewbatchupdateTest[90419:a0b] Before Rotation
2013-10-16 17:05:18.446 collectionviewbatchupdateTest[90419:a0b] collecitonview Rect : {{0, 0}, {1024, 768}}
2013-10-16 17:05:18.446 collectionviewbatchupdateTest[90419:a0b] view Rect : {{0, 0}, {768, 1024}}
2013-10-16 17:05:18.851 collectionviewbatchupdateTest[90419:a0b] After Rotation
2013-10-16 17:05:18.851 collectionviewbatchupdateTest[90419:a0b] collecitonview Rect : {{-128, 0}, {1024, 1024}}
2013-10-16 17:05:18.852 collectionviewbatchupdateTest[90419:a0b] view Rect : {{0, 0}, {768, 1024}}

最佳答案

同样的问题。它看起来像是 UICollectionView 中的错误。我能找到的唯一其他解决方法是在旋转后重置 Collection View 的框架。

它似乎发生在旋转期间的任何批更新中,而不仅仅是 reloadItemsAtIndexPaths。

关于ios - UICollectionView performBatchUpdates 导致 collectionview 在旋转设备时错位,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19396440/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com