我有一个TabBarController
,它有两个标签。在每个标签中,我都有UICollectionView
和UITapGestureRecognizer
每次点击collectionView
时都会触发。应用程序启动后,一切正常。但是,如果我旋转到横向,TapGestureRecognizer
仅在collectionView
的旧框架中触发。它绝对忽略了屏幕的右侧。
但是,如果我切换到另一个选项卡然后再回来,它也适用于横向方向。我只是不明白我做错了什么。
这就是我改变collectionView
的定位模式的方式:
-(void)willRotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration
{
[super willRotateToInterfaceOrientation:toInterfaceOrientation duration:duration];
[self.cardCollectionView.collectionViewLayout invalidateLayout];
}
答案 0 :(得分:0)
invalidateLayout实际上没有使集合视图本身的布局无效,它强制失效并重新计算内部单元格布局 - doc
要处理集合视图框架更改,您必须考虑常规视图。尝试设置集合视图的自动调整掩码(例如在viewDidLoad中),如:
self.cardCollectionView.autoresizingMask = UIViewAutoresizingFlexibleWidth|UIViewAutoresizingFlexibleHeight;
尝试将集合视图的自动调整设置为http://d.pr/i/nk3o,代码如下:
self.cardCollectionView.autoresizingMask = UIViewAutoresizingFlexibleBottomMargin|UIViewAutoresizingFlexibleWidth|UIViewAutoresizingFlexibleHeight|
UIViewAutoresizingFlexibleBottomMargin 非常重要,说UIKit来自哪里计算位置