iPad UISplitViewController Phantom Master View控制器

使用UISplitViewController查找自动旋转问题的解决scheme。 重新创build的步骤是:

  1. 使用Xcode 4.5+和iOS6 + SDK,使用“Master-Detail Application:”模板创build一个新项目。
  2. 使用全屏大小的XIB文件将新的视图控制器添加到项目中。
  3. 向使用-presentViewController呈现新视图控制器全屏的详细视图控制器添加一个button:animated:completion:
  4. 将一个button添加到使用dismissViewControllerAnimated消除自身的新视图控制器:完成:
  5. 在横向模式下使用iPad启动应用程序,然后点击提供新视图控制器的详细视图中步骤3中创build的button。
  6. 查看全屏视图控制器时,将iPad旋转为纵向,然后点击步骤4中添加的button以closures新的视图控制器。

问题:使用这些步骤,主视图控制器和详细视图控制器都将自动旋转,但主视图控制器将停留在屏幕上处于无响应状态,并占用屏幕左上angular的框架,该框架的大小与它是在横向模式。 通过使用iPad左侧的手势,将显示正确的主视图控制器并清除问题。

我们已经能够在新的视图控制器中使用viewWillAppear和viewDidDisappear来隐藏幻影主视图控制器,但即使使用该修复,模板在纵向提供的“主”button在执行上述步骤后仍然没有响应,而我们已经追踪到这样的事实,即在修复之前由主视图控制器占用的左上方的屏幕区域对触摸没有响应。

我们已经尝试了几次以不同的方式辞职的第一反应者,但没有完全解决问题的运气。

注意:如果在首次启动应用程序时遵循上述步骤5-6,则通常会发生此问题。 在单个应用程序启动中重复步骤6通常不会导致每次都出现问题。 每次发布应用程序都是可重复的。

find了一个解决这个问题。

  1. 在调用presentViewController之前,将视图控制器的模态表示风格设置为UIModalPresentationPageSheet:animated:completion :.
  2. 然后,重写视图控制器-viewWillLayoutSubviews方法来手动设置超级视图的边界以匹配屏幕大小,纵向768×1004和横向1024×748。