9

我在我的应用程序中使用VFR PDF 查看器库,我在其中展示它:

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 确实会被调用,这让我相信库没问题,而我在我的应用程序。

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

4

2 回答 2

12

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

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

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

[super viewWillTransitionToSize:size withTransitionCoordinator:coordinator]

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

解决方法是添加一个调用

[super viewWillTransitionToSize:size withTransitionCoordinator:coordinator]

进入父VC的viewWillTransitionToSize:withTransitionCoordinator:方法,子类ReaderViewController,然后在viewWillTransitionToSize:withTransitionCoordinator:我的子类中添加一个调用适当的方法ReaderViewController

于 2014-11-12T09:35:50.830 回答
3

仅仅是因为willRotateToInterfaceOrientation在 iOS8 中不再调用它,所以它已被弃用。

如果未实现新的旋转方法,并且使用 iOS 8 SDK 编译项目,则视图控制器 - 将不会收到对已弃用的旋转方法的调用。

可以在这里找到与您类似的问题

引用@mluisbrown:

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

我在遇到与您类似的问题时有些挣扎。我尝试按照 Apple 的建议使用viewWillTransitionToSize,在我的情况下这并没有解决我的问题,因为这只会在从常规更改为紧凑时触发,例如不旋转。

viewWillTransitionToSize:withTransitionCoordinator: 进行基于界面的调整。

苹果文档中有详细说明

WWDC 2014的视频也解释了这一点,但我不记得是哪个视频了。也许是 onWhat's new in Cocoa touch或 one on View Controller Advancements in iOS 8

编辑

请注意,在我的情况下viewWillTransitionToSize,正如所解释的那样,没有调用,因为我没有从常规更改为紧凑,因此严格来说对于 Apple 来说没有大小转换。

viewDidLayoutSubviews我找到的唯一解决方案是在相应的视图控制器中手动处理这个问题。

就我而言,我想使用自动布局跟踪显示在表格视图中的顶部单元格。由于系统没有自动跟踪它,我不得不手动检查并手动滚动到适当的旋转单元格。这就是我这样做的原因。它相当“重”,但在我的情况下有效。

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

于 2014-11-10T10:10:48.837 回答