在 ios9 上的 uiwebview 中显示 pdf 有时滚动会卡住

showing a pdf in uiwebview on ios9 sometimes scrolling is stuck

我正在开发使用 swift、xcode7

编写的 ios 应用程序

视图上有 UIWebView

使用 loadRequest(NSURLRequest) 我们从磁盘加载一个 pdf 文件。 这工作正常,但有时 pdf 文件无法滚动到第一页或您首先在屏幕上看到的内容。我无法确定导致不滚动的原因,因为有时我会再次打开同一个文件然后它会滚动。

当它不想弹跳屏幕底部时尝试滚动,您可以看到还有另一页,但无法将其滚动到视图中。

UIWebView(这是默认设置)中包含的 UIScrollView 知道还有更多页面,因为它在屏幕上显示“1 of 3”。

UIWebView

我试过以下方法:

在应用程序中,当显示 UIWebview 时,它会通过折叠其上方的元素在屏幕上调整大小,但我已经用固定高度对其进行了测试,它没有任何改变。

当我在内部UIScrollView上调用flashScrollIndicators()时,这与滚动或非滚动是一致的。如果您看到滚动条闪烁,则可以滚动。如果没有,那么您将无法滚动到第一页。

我可以尝试其他想法吗?

这听起来像是一个奇怪的 UIWebView 问题。 您可以检查另外两件事:

  • 旋转后问题解决了吗? (如果我遇到过一次)

  • 如果您在内部 UIScrollView 上调用 flashScrollIndicators 而它没有响应。内部 UIScrollView 是 nil 对象吗?

另一个解决方案是尝试使用 WKWebView。它可能会解决问题。请确保仅在 iOS.

的最新版本中使用它

您还可以降低一层并使用 CoreGraphics 实现它,因为您在设备本身而不是 Web 上拥有 PDF (official docs)。可能有一个很好的 CocoaPod 或 Carthage 框架可以用于此目的。

潜在的问题是,在加载新的pdf之前,每次加载'about:blank'都会清除UIWebView,这是清除webview最推荐的解决方案。但是,当处理具有不同页面大小和不同页数的 pdf 时,这似乎与内置滚动视图混淆。

这种情况下的解决方案是创建一种 'blank' pdf 单页(可能还有一个应用程序徽标,以便用户清楚地区分)而不是加载 about:blank, 在向用户显示 webview 之前加载此 pdf,同时等待真正的 pdf 下载到设备。