我将 WKWebView 子视图添加到 PhoneGap / Cordova 4.0+ 应用程序中(通过cordova-plugin-wkwebview-engine)并使用编程自动布局约束使 WKWebView 的大小与 MainViewController 的视图相同。
当我查看 WKWebView 的边界时,它与 MainViewController 视图的边界相匹配。
但是使用Javascript 来检查内容大小,特别是看起来像这样的脚本:
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
out 移动到viewDidAppear
,还尝试“硬编码”将静态 iPad Pro 大小的帧大小传递到[WKWebView initWithFrame:]
,但内容大小保持在 735.0.0。在模拟器的移动版 Safari 和桌面版 Safari 中,相同的内容呈现精美(且正确)。
如何强制 WKWebView 的内容大小与父视图的边界相匹配?
如果您想在 iPad Pro 模拟器上看到这个错误,我在https://github.com/dautermann/phonegap-air有一个公共 github 存储库。请务必获取“演示问题”分支。