Quicklook/QLPreviewController在ios 8上显示空白页而不是pdf,但在iOS7上工作正常

san*_*ana 13 pdf ios qlpreviewcontroller ios8

我正在尝试在QLPreviewController中预览pdf文件并使用以下代码.它在iOS7iOS8上的其他类型的文件(JPG/PNG)上工作正常,但是当我尝试打开pdf时,它在iOS8上显示空白页面而不是内容.奇怪的是,它仍然在标题视图中显示pdf的名称.

码:

QLPreviewController *previewer = [[QLPreviewController alloc] init];
previewer.dataSource = self;
previewer.currentPreviewItemIndex = 0;
[self presentViewController:previewer animated:NO completion:nil];
Run Code Online (Sandbox Code Playgroud)

和QLPreviewControllerDataSource方法:

- (NSInteger)numberOfPreviewItemsInPreviewController:(QLPreviewController *)controller {
    return 1;
}

- (id<QLPreviewItem>)previewController:(QLPreviewController *)controller previewItemAtIndex:(NSInteger)index {
    return [NSURL fileURLWithPath:self.pdfUrl];
}
Run Code Online (Sandbox Code Playgroud)

Cod*_*anc 5

这实际上是iOS 8 Beta 5中的已知问题.

请参阅QuickLook下的网址 https://developer.apple.com/library/prerelease/ios/releasenotes/General/RN-iOSSDK-8.0/

  • 从UINavigationController中删除QLPreviewController解决了我的问题.在iOS SDK 8.0中,QLPreviewController处理其上的导航栏和按钮. (2认同)

Cri*_*ris 5

在UINavigationController中放置QLPreviewController时似乎存在错误.即使文档已加载,它也只显示为黑色视图.

UINavigationController *navController = [[UINavigationController alloc] initWithRootViewController:previewController];
[self presentViewController:navController animated:YES completion:nil];
Run Code Online (Sandbox Code Playgroud)

解决方案是使用导航控制器.无论如何,QLPreviewController都会覆盖导航栏.

[self presentViewController:previewController animated:YES completion:nil];
Run Code Online (Sandbox Code Playgroud)


Che*_*vid 5

这里可能涉及两件事。

对于那些在UINavigationController中实现QLPreviewController的人来说,那里可能存在问题。

对于那些仍然没有UINavigationController的问题,请继续阅读。

在iOS 8.0中,数据的文件路径已更改。因此,如果您使用较旧的分发包路径访问资源,则可能会遇到问题。

我们确实对此进行了调查,结果表明:

  • 您需要密切注意获取文档目录的完整路径的方式
  • 如果您未创建QLPreviewController,则QLPreviewController不能在此Documents目录的子文件夹中显示文件。

例如,我们的问题是我们的PDF文件是使用传统的“打开方式”从外部应用程序打开的。

这导致文件被复制到应用程序文档目录内的收件箱目录。

无论QLPreviewController是否嵌入在UINavigationController中,文件都会在模拟器上正确显示。

该文件未在真实的iOS设备上正确显示。

在将文件URL发送到QLPReviewController之前,我们确实将文件复制到Documents目录的根目录,并将此新URL传递到QLPreviewController。然后宾果游戏成功了。

因此,为了阻止此问题,请确保将资源复制到您实际拥有的目录中。直到有人可以解释如何使用“收件箱”(可能是共享的)目录上的权限。


DrM*_*uer 5

我最近再次遇到空白页,我发现原因是我做了类似的事情

previewController.dataSource = [[MyDataSource alloc] initWithSomething];
Run Code Online (Sandbox Code Playgroud)

由于QLPreviewController将其数据源保存为弱变量,因此数据源立即消失。

保持对数据源的强引用很有帮助。