在iOS8上没有调用willRotateToInterfaceOrientation

时间:2014-11-10 10:06:24

标签: ipad ios8 uiinterfaceorientation vfr-reader

我正在我的应用中使用VFR PDF viewer library,因此我会在其中展示:

ReaderDocument *document = [ReaderDocument withDocumentFilePath:pdfFile password:nil];
ReaderViewController *vc = [[ReaderViewController alloc] initWithReaderDocument:document];
[self.navigationController pushViewController:vc animated:YES];

如果我在iOS7上运行,一切正常。

如果我在iOS8上运行我的应用程序,则不会调用ReaderViewController中的willRotateToInterfaceOrientation方法,因此在旋转设备时,文档无法正确重新格式化。

但是,如果我运行iOS8上的库附带的演示应用程序,那么ReaderViewController中的willRotateToInterfaceOrientation会被调用,这让我相信库是可以的,我做错了(或者忽略了做某事)在我的应用程序中。

我对这种行为感到很困惑。为什么不在我的iOS8应用程序中调用rpmRotateToInterfaceOrientation,但它在其他变体下呢?我怎样才能尝试追踪这个?

2 个答案:

答案 0 :(得分:12)

我终于设法解决了我的问题;如果其他人遇到同样的问题,这就是问题所在。

我的ReaderViewController是从已经实现viewWillTransitionToSize:withTransitionCoordinator:的类中呈现的,因此不会调用子视图控制器上已弃用的方法。

同样在那个实现中,它没有调用

[super viewWillTransitionToSize:size withTransitionCoordinator:coordinator]

因此,所有子视图控制器的viewWillTransitionToSize:withTransitionCoordinator:方法也未被调用。

修复是添加对

的调用
[super viewWillTransitionToSize:size withTransitionCoordinator:coordinator]

进入父VC的viewWillTransitionToSize:withTransitionCoordinator:方法,子类ReaderViewController,然后在我的子类中添加viewWillTransitionToSize:withTransitionCoordinator:以调用ReaderViewController中的相应方法。

答案 1 :(得分:3)

仅仅因为在iOS8中不再调用willRotateToInterfaceOrientation,所以不推荐使用它。

  

如果没有实现新的旋转方法,那么项目就是   使用iOS 8 SDK编译时,视图控制器将无法接收   调用不推荐的轮换方法。

可以找到与您类似的问题here

引用@mluisbrown:

  

iOS 8 SDK中不推荐使用旋转方法。这将有   对使用iOS 7 SDK构建的应用程序完全没有影响,甚至在iOS中运行   8可能是iOS的未来几个版本。

我遇到了一些与你类似的问题。我尝试遵循Apple建议使用viewWillTransitionToSize,在我的情况下,这并没有解决我的问题,因为这只会在从常规到紧凑的变化时被触发,例如不能轮换。

  

viewWillTransitionToSize:withTransitionCoordinator:make   基于界面的调整。

详见apple documentation

此外,WWDC 2014的视频解释了这一点,但我无法记住它是哪个视频。可能是What's new in Cocoa touch上的那个或View Controller Advancements in iOS 8上的那个。

修改

请注意,在我的情况下viewWillTransitionToSize,如上所述,没有被调用,因为我没有从常规变为紧凑,所以没有大小过渡,严格来说对于Apple。

我设置的唯一解决方案是在相应的视图控制器的viewDidLayoutSubviews中手动处理。

在我的情况下,我想跟踪自动布局的tableview中显示的顶部单元格。由于系统没有自动跟踪,我必须手动检查并在旋转时手动滚动到适当的单元格。这就是为什么我这样做的原因。它非常重#34;但在我的情况下工作。

如果有人有更简单的解决方案,我也会感兴趣。