Cordova 以编程方式更改WKWebView内容大小

Cordova 以编程方式更改WKWebView内容大小,cordova,phonegap-plugins,wkwebview,wkwebviewconfiguration,cordova-4,Cordova,Phonegap Plugins,Wkwebview,Wkwebviewconfiguration,Cordova 4,我将WKWebView子视图添加到PhoneGap/Cordova 4.0+应用程序(via)中,并使WKWebView的大小与MainViewController的视图相同 查看WKWebView的边界时,它与MainViewController视图的边界相匹配 但使用的脚本,具体如下所示: var body = document.body; var html = document.documentElement; Math.max(body.scrollHeight,body.offset

我将WKWebView子视图添加到PhoneGap/Cordova 4.0+应用程序(via)中,并使WKWebView的大小与MainViewController的视图相同

查看WKWebView的边界时,它与MainViewController视图的边界相匹配

但使用的脚本,具体如下所示:

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 fun!),我实际上注意到,我在PhoneGap/Cordova中传递到WKWebView的任何URL都会出现问题。以下是apple.com在我的应用程序中的外观:

以下是在MobileSafari(在模拟器中运行)中它应该是什么样子,大小正确的版本:

您可以看到顶部栏项目的间距不同(在桌面上,它们应该从窗口的两侧缩进),并且在底部边缘显示更多,因为web视图的内部高度更高

为了解决我的问题,我已经做了所有的事情,从将WKWebView实例化从
viewDidLoad
移出到
ViewDidAspect
,还尝试“硬编码”一个静态iPad Pro大小的框架大小被传递到
[WKWebView initWithFrame:
,但内容大小仍然保持在735.0。同样的内容在模拟器的移动Safari和桌面Safari中都呈现得非常漂亮(正确)

如何强制WKWebView的内容大小与父视图的边界匹配

如果你想在iPadPro模拟器上看到这个bug,我有一个公共github repo。一定要去拿树枝。

简短回答: 您需要在
WKNavigationDelegate
webView:didFinishNavigation:
方法中检查
contentSize
,直到这里,您的JavaScript代码只能获得735.0 as
contentSize

再回答一点 创建
WKWebView
时,其
框架在
initwithFrame
框架中具有相同的大小。直到autolayout发挥其魔力,也就是说,直到您的
UIViewController
中的
viewDidLayoutSubviews
方法,它才会改变

此时,您有一个
WKWebView
,它涵盖了主视图,但您网站的
contentSize
并不是您所期望的。因为你的网站还没有

您需要设置
webView.navigationDelegate={delegate}
以侦听导航事件。在通过
webView:didfishnavigation:
方法调用
delegate
之前,您的网站不会在那里%100。从现在起,您可以测量预期的
contentSize


希望能有所帮助。

我认为您遇到的问题与WebView没有直接关系。这与以下事实有关:出于向后兼容性的原因,在iPad Pro上运行的“旧”应用程序没有“本机分辨率”,而是使用iPad 1024x768

让苹果相信你知道iPad Pro及其本机分辨率的方法是指定一些LaunchScreen情节提要。是的,这是一个有点令人惊讶的方式,但这就是它(参见示例)。如果我在GitHub上修改您的测试项目中的
OTA应用程序
目标,并将标准
CDVlunchScreen
指定为
LaunchScreen文件
,那么一切对我来说都很好

更新


如果使用XCode 8,只需为iPad Pro指定合适分辨率的启动图像就足够了。不过我还没有试过。

当我试过的时候,我可以在我的
WKWebView
中看到apple.com的4列。您在何处/以何种方法检查
contentSize
?您是否在Cordova应用程序中执行此操作?至于我在哪里运行javascript,它目前位于MainViewController的
viewdide:
方法中。我在@MichaelDautermann的
viewwillbeen
viewDidLoad
中得到了相同的结果。你是否在使用状态栏插件?我不知道。我没有明确安装一个。我如何确定一个是偶然安装的,还是作为其他东西的一部分安装的?@MichaelDautermann如果安装了它,您将在项目的插件文件夹中找到它。我将在几分钟后尝试一下。我可以告诉你的是,我通过
WKWebView initWithFrame:
发送的帧的
大小和高度为1024.0,但即使在多次
loadRequest:
之后,也会显示735.0的高度。这是我传递到WKWebView的Javascript查询的结果。WKWebView的边界和帧CGRect属性实际上大小正确(即比735.0高得多)。下面是我尝试过的代码(使用我得到的值)。奇怪的是,我无法在我的示例项目中复制2列apple.com,它只是一个简单的WKWebView。我想你之所以不复制它,是因为你似乎在使用一个WKWebView,它只是被放到了一个非Cordova/非Phonegap的应用程序中。我的WKWebview实例化发生在名为
CDVWKWebViewEngine.m
的文件中,该文件是
cordova插件WKWebview引擎
的一部分。您能否尝试将观察者添加到
CDVPageDidLoadNotification
通知中,并在触发后测量
contentSize
?谢谢你在这件事上支持我。当
CDVPageDidLoadNotification
触发时,我现在得到的contentSize为1453(!)。比735.0好多了。不幸的是,我在apple.com的WKWebView中只看到了两个专栏。如果你想确切地看到我所看到的,我现在按下了一个按钮。成功了!不管Cordova/Phonegap(它不依赖于Cordova/Phonegap),这不是我以前遇到的问题,这是多么奇怪。