旋转后UITapGestureRecognizer不会触发

Kon*_*tin 5 objective-c ios uitapgesturerecognizer uicollectionview

我有一个TabBarController有两个选项卡.在每个标签中我都有UICollectionView,UITapGestureRecognizer每次点击时都会触发collectionView.应用程序启动后,一切正常.但如果我转向横向,TapGestureRecognizer只能在collectionView旧框架中发射.它绝对忽略了屏幕的右侧.

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

这就是我改变方向模式的方法collectionView:

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

in.*_*see 0

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

要处理集合视图框架的更改,您必须像对待常规视图一样思考它。尝试设置集合视图的自动调整大小掩码(例如在 viewDidLoad 中),如下所示:

self.cardCollectionView.autoresizingMask = UIViewAutoresizingFlexibleWidth|UIViewAutoresizingFlexibleHeight;
Run Code Online (Sandbox Code Playgroud)

更新

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

self.cardCollectionView.autoresizingMask = UIViewAutoresizingFlexibleBottomMargin|UIViewAutoresizingFlexibleWidth|UIViewAutoresizingFlexibleHeight|
Run Code Online (Sandbox Code Playgroud)

;

UIViewAutoresizingFlexibleBottomMargin很重要说UIKit从哪里计算位置