2016-04-14 13 views
7

In iOS 9.2, ein WKWebView HTML-Darstellung mit fester Breite Tabellen größer als die Gerätebreite gesagt werden könnte, um den Inhalt zu schrumpfen durch Hinzufügen eines Ansichtsfenster Tag wie folgt angepasst:WKWebView Ansichtsfenster schrumpfen-to-fit funktionieren nicht auf iOS 9.3

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

Diese Linie verursacht die WKWebView effektiv so das Ansichtsfenster zu verkleinern, dass die gesamte gerenderte Seite passen in den Ansichtsrahmen, ohne dass Bildlaufleisten. Betrachten wir zum Beispiel den folgenden Code, wenn in viewDidLoad in einer Vanille einzigen Ansicht app laufen:

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]; 

Der Inhalt macht wie folgt aus:

enter image description here

jedoch dieses Verhalten in 9.3 geändert hat. Der gleiche Code in 9.3 läuft macht wie folgt aus:

enter image description here

(Auch wenn Sie es nicht im Screenshot sehen kann, gibt es eine horizontale Scrollbar)

Suche weitere Fragen auf Stackoverflow und anderswo, es scheint wie die meisten anderen Menschen bevorzugen das Verhalten 9.3. Ich benötige jedoch das 9.2 Verhalten von shrink-to-fit. Meine Frage ist also: Weiß jemand, wie man das gleiche Schrumpf-zu-Fit-Verhalten in 9.3 erhält? Und weiß jemand, ob diese Änderung absichtlich ist oder ein Bug, der in späteren Versionen behoben wird?

Mein Testcode kann bei https://github.com/nsolter/NSWebViewShrinkTest gefunden werden, und zwar https://github.com/nsolter/NSWebViewShrinkTest/blob/master/NSWebViewShrinkTest/ViewController.m

Antwort

6

Ich legte einen Fehlerbericht mit Apple, und dies ist die Antwort:

„Nein, wir wollen schrumpfen zu nicht halten -Fehlerverhalten. Die Problemumgehung besteht darin, ein Viewport-Meta-Tag zu verwenden, das die Breite des Inhalts korrekt beschreibt. "

Ich habe versucht, diese aus. Wenn Sie im Ansichtsfenster-Tag eine Breite der tatsächlichen Breite des HTML-Codes angeben, nachdem es gerendert wurde, wird es auf Ihrer Gerätebreite korrekt angezeigt. In meinem obigen Beispiel mit einer Tischbreite von 700, wenn Sie Folgendes angeben: <meta name=\"viewport\" content=\"width=700, shrink-to-fit=YES\">

Dann wird die Seite ohne horizontale Bildlaufleisten angezeigt.

Beachten Sie, dass keine anfängliche angelegte Darstellungs Eigenschaft angeben können, though. Dann wird es nicht mit der richtigen Breite angezeigt.

Das ist natürlich weniger als ideal, weil man im Allgemeinen nicht wissen, was die Breite des gerenderten html sein wird, bis Sie es machen. Meine derzeitige Lösung ist es, es einmal mit width = device-width zu rendern, dann rendern Sie es erneut mit width = X, wobei X die tatsächliche Breite der gerenderten Seite beim ersten Mal ist.

+0

ich auch width = device-width verwenden und das gleiche Problem gegenüber. Laden Sie die Seite mit width = X neu? – anoop4real

+0

Eigentlich ja. Ich rende es tatsächlich in einem neuen WKWebView, das gerade nicht angezeigt wird, und tausche es dann in diesem neuen Webview. –

+1

Haben Sie einige Proben? – anoop4real

Verwandte Themen