2016-04-14 60 views
7

在iOS 9.2中,可以通过添加如下视口标记来告知WKWebView呈现具有固定宽度表大于设备宽度的HTML的HTML:WKWebView视口缩小到适合在iOS上不起作用9.3

<meta name="viewport" content="width=device-width, shrink-to-fit=YES"> 

此行导致WKWebView有效缩小视口,以便整个呈现的页面无需滚动条即可适应视图框架。例如,请考虑下面的代码,在viewDidLoad中的香草单一视图的应用程序运行时:

WKWebViewConfiguration *wkWebConfig = [[WKWebViewConfiguration alloc] init]; 
WKWebView *newWebView = [[WKWebView alloc] initWithFrame:CGRectMake(0,40,self.view.frame.size.width, self.view.frame.size.height - 40) configuration:wkWebConfig]; 
NSString *toRender = @"<head><meta name=\"viewport\" content=\"width=device-width, shrink-to-fit=YES\"></head><body><table width=700 style='background-color: blue; color:white; font-size=20px'><tr><td>this is some text that is long enough to exceed the width of the iphone 6 unless shrink-to-fit is applied</td></tr></table></body>"; 
[newWebView loadHTMLString:toRender baseURL:nil]; 
[self.view addSubview:newWebView]; 

内容呈现这样的:

enter image description here

然而,这种行为在9.3改变。在9.3中运行的相同代码将呈现这样的:

enter image description here

(虽然你不能看到它的屏幕截图,有一个水平滚动条)

搜索计算器上的其他问题和其他地方,它似乎大多数其他人更喜欢9.3的行为。但是,我需要9.2缩小到适合的行为。所以,我的问题是:有没有人知道如何在9.3中获得相同的缩小到适合的行为?有没有人知道这种改变是有意的,还是一个将在后续版本中修复的错误?

我的测试代码可以在https://github.com/nsolter/NSWebViewShrinkTest发现,特别是https://github.com/nsolter/NSWebViewShrinkTest/blob/master/NSWebViewShrinkTest/ViewController.m

回答

6

我提交了一份bug报告与苹果,这是响应:

“不,我们不希望保持收缩到-fit行为。解决方法是使用正确描述内容宽度的视口元标记。“

我试过了。如果在视口标记中,您在呈现html后指定了实际宽度的宽度,它将在您的设备宽度上正确显示。在我上面的示例中,如果指定:表格宽度为700,则指定:<meta name=\"viewport\" content=\"width=700, shrink-to-fit=YES\">

然后,该页面将显示不带水平滚动条的页面。

请注意,您不能指定初始缩放视口属性。然后它不显示适当的宽度。

这显然并不理想,因为在渲染之前,您通常不知道渲染的html的宽度。我目前的解决方案是用width = device-width渲染一次,然后再用width = X渲染它,其中X是第一次渲染页面的实际宽度。

+0

我也使用宽度=设备宽度和面临同样的问题。你正在重新加载宽度= X的页面? – anoop4real

+0

基本上,是的。我实际上是将它呈现在当前未显示的新WKWebView中,然后在新的webview中进行交换。 –

+1

你有样品吗? – anoop4real