这是应用程序处于纵向模式时的视图.
当它旋转到横向模式时,它看起来像这样
视图调试器显示UIWindow未旋转,如此处所示
UICollectionViewController是通过StoryBoard创建的.我已经尝试了子类化实现shouldInvalidateLayoutForBoundsChange的UICollectionViewFlowLayout,但它并没有解决我的问题.
- (BOOL)shouldInvalidateLayoutForBoundsChange:(CGRect)newBounds { CGRect oldBounds = self.collectionView.bounds; if (CGRectGetWidth(newBounds) != CGRectGetWidth(oldBounds)) { return YES; } return NO; }
编辑 – 正如MirekE所建议的那样,我试图向CollectionView添加约束但却无法使用. Editor-> Pin的所有选项都不适用于CollectionView.
编辑,回应安德里亚 –
我的目标是iOS8.3.我的理解是旋转时调用的主要方法是viewWillTransitionToSize:withTransitionCoordinator:,它来自UIContentContainer protocol.我已将以下内容添加到我的CollectionViewController中,但同样的问题仍然存在
-(void)viewWillTransitionToSize:(CGSize)size withTransitionCoordinator:(id <UIViewControllerTransitionCoordinator>)coordinator { [self.collectionView.collectionViewLayout invalidateLayout]; [self.collectionView reloadData]; }
解决方法
我不知道你针对哪个iOS版本,但让我想你知道视图控制器中调用的旋转过程和方法.
[self.collectionView.collectionViewLayout invalidateLayout];
并且可能取决于你的布局-reloadData
不需要子类.
编辑
我使用这种方法,我想这不起作用,因为你应该在调整大小后重新传输集合:
- (void) willTransitionToTraitCollection:(UITraitCollection *)newCollection withTransitionCoordinator:(id<UIViewControllerTransitionCoordinator>)coordinator { [super willTransitionToTraitCollection:newCollection withTransitionCoordinator:coordinator]; [coordinator animateAlongsideTransition:^(id<UIViewControllerTransitionCoordinatorContext> context) { [self.collectionView.collectionViewLayout invalidateLayout]; } completion:^(id<UIViewControllerTransitionCoordinatorContext> context) { [self.collectionView reloadData]; }]; }
我正在做什么将布局失效过程附加到动画过程.