旋转后UITapGestureRecognizer不会触发

时间:2013-11-18 11:03:09

标签: ios objective-c uicollectionview uitapgesturerecognizer

我有一个TabBarController,它有两个标签。在每个标签中,我都有UICollectionViewUITapGestureRecognizer每次点击collectionView时都会触发。应用程序启动后,一切正常。但是,如果我旋转到横向,TapGestureRecognizer仅在collectionView的旧框架中触发。它绝对忽略了屏幕的右侧。

但是,如果我切换到另一个选项卡然后再回来,它也适用于横向方向。我只是不明白我做错了什么。

这就是我改变collectionView的定位模式的方式:

-(void)willRotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration
{
    [super willRotateToInterfaceOrientation:toInterfaceOrientation duration:duration];
    [self.cardCollectionView.collectionViewLayout invalidateLayout];
}

1 个答案:

答案 0 :(得分:0)

invalidateLayout实际上没有使集合视图本身的布局无效,它强制失效并重新计算内部单元格布局 - doc

要处理集合视图框架更改,您必须考虑常规视图。尝试设置集合视图的自动调整掩码(例如在viewDidLoad中),如:

self.cardCollectionView.autoresizingMask = UIViewAutoresizingFlexibleWidth|UIViewAutoresizingFlexibleHeight;

更新

尝试将集合视图的自动调整设置为http://d.pr/i/nk3o,代码如下:

self.cardCollectionView.autoresizingMask = UIViewAutoresizingFlexibleBottomMargin|UIViewAutoresizingFlexibleWidth|UIViewAutoresizingFlexibleHeight|

UIViewAutoresizingFlexibleBottomMargin 非常重要,说UIKit来自哪里计算位置