如何在子视图中使用 QLPreviewController 显示页面洗涤器
Posted
技术标签:
【中文标题】如何在子视图中使用 QLPreviewController 显示页面洗涤器【英文标题】:How to display page scrubber with QLPreviewController in a subview 【发布时间】:2012-11-20 15:56:57 【问题描述】:我通过像这样将QLPreviewController
添加为子视图控制器,将QLPreviewController
嵌入到我自己的视图控制器中(contentArea
是一个UIView
属性,用于确定预览应该使用屏幕的哪个部分):
QLPreviewController* preview = [[QLPreviewController alloc] init];
preview.dataSource = self;
preview.delegate = self;
[self addChildViewController:preview];
CGFloat w = self.contentArea.frame.size.width;
CGFloat h = self.contentArea.frame.size.height;
preview.view.frame = CGRectMake(0, 0,w, h);
[self.contentArea addSubview:preview.view];
[preview didMoveToParentViewController:self];
self.qlPreviewController = preview;
到目前为止,这有效。但是,当我打开 PDF 时,当QLPreviewController
全屏显示时,我没有看到右侧显示的页面浏览器(见屏幕截图)。
使用DCIntrospect 我看到有一个QLScrubView
类型的特殊子视图负责这个:
...
| <QLScrubView: 0x1274e990; frame = (963 64; 61 704); autoresize = LM+H; layer = <CALayer: 0x1274eb30>>
| | <QLThumbnailView: 0x11fc6460; frame = (17 329; 32 45); layer = <CALayer: 0x11fcb4b0>>
| | <QLThumbnailView: 0x11fd45a0; frame = (17 382; 32 45); layer = <CALayer: 0x11fbe830>>
| | <QLThumbnailView: 0x1274dae0; frame = (9 268; 48 61); layer = <CALayer: 0x1273b860>>
...
但是,嵌入式用例中缺少此擦洗视图。
任何想法如何使它出现?
【问题讨论】:
嗨丹尼尔!有什么解决办法吗?? 没有。从那时起,我们已经切换到 PSPDFKit。更灵活,疼痛更少。但当然是商业的。一个免费的替代品可能是github.com/vfr/Reader 谢谢,我已经知道 vfr/Reader,但我需要一个垂直滚动页面的解决方案。不需要很多 vfr/Reader 功能。 【参考方案1】:当您有多个页面时,它会自动显示。我猜你的PDF有问题。尝试其他来源的其他 PDF,看看是否遇到同样的问题。我一直在使用 PDF,而且浏览器显示得很好。
我的另一个想法是调整预览控制器的大小可能不正常。尝试将预览控制器加载为模态视图控制器(无父级),看看是否仍隐藏着scrubber。
【讨论】:
对这两种情况使用完全相同的 PDF。奇怪的是,正如我所说,整个子视图层次结构都没有用于洗涤器。也就是说,我同时以不同的方式解决了这个问题,但仍然想了解发生了什么。以上是关于如何在子视图中使用 QLPreviewController 显示页面洗涤器的主要内容,如果未能解决你的问题,请参考以下文章