【发布时间】:2017-02-28 07:03:31
【问题描述】:
我在 PhoneGap / Cordova 4.0+ 应用程序(通过cordova-plugin-wkwebview-engine)和used programmatic AutoLayout constraints 中添加了一个 WKWebView 子视图,以使 WKWebView 的大小与 MainViewController 的视图相同。
当我查看 WKWebView 的边界时,它与 MainViewController 视图的边界匹配。
但是使用Javascript to inspect the content size,特别是看起来像这样的脚本:
var body = document.body;
var html = document.documentElement;
Math.max(body.scrollHeight,body.offsetHeight,html.clientHeight,html.offsetHeight);
这返回的高度实际上约为 WKWebView 边界高度的 1/2 到 2/3(在 iPad Pro 模拟器上,我将边界高度设置为 1024.0,但 Javascript 报告的内容高度仅为 735.0)。而且我只显示了我想显示的非调整大小的 Vue.js 内容的一半。
由于我无法显示我正在使用的实际内容(NDA 很有趣!),我实际上注意到问题发生在我传递到 PhoneGap/Cordova 中的 WKWebView 的 任何 URL 上。这是 apple.com 在我的应用程序中的样子:
这是它应该在 Mobile Safari 中(在模拟器中运行)中的正确尺寸版本:
您可以看到顶部栏项目的间距不同(在桌面上它们应该从窗口的任一侧缩进一些)并且底部边缘显示更多,因为 Web 视图的内部高度更高。
为了解决我的问题,我已经完成了所有工作,从将 WKWebView 实例从 viewDidLoad 移出到 viewDidAppear,并尝试“硬编码”将静态 iPad Pro 大小的帧大小传递到 [WKWebView initWithFrame:],但是内容大小保持在 735.0。在模拟器的移动版 Safari 和桌面版 Safari 中,相同的内容呈现精美(且正确)。
如何强制 WKWebView 的内容大小匹配父视图的边界?
如果您想在 iPad Pro 模拟器上查看此错误,我在 https://github.com/dautermann/phonegap-air 有一个公共 github 存储库。请务必获取"demonstrate-issue" 分支。
【问题讨论】:
-
当我尝试时,我可以看到 apple.com 在我的
WKWebView中有 4 列。您在哪里/以哪种方法检查contentSize? -
您是在 Cordova 应用程序中执行此操作吗?至于我在哪里运行该 javascript,它目前位于 MainViewController 的
viewDidAppear:方法中。我在viewWillAppear和viewDidLoad得到了相同的结果。 -
@MichaelDautermann 你有没有使用状态栏插件?
-
我不知道。我没有明确安装一个。我如何确定一个是意外安装还是作为其他东西的一部分?
-
@MichaelDautermann 如果已安装,您将在项目的插件文件夹中找到它。
标签: cordova phonegap-plugins wkwebview wkwebviewconfiguration cordova-4