3 Stimmen

Webseite in UIWebView passt die Größe nicht korrekt an, wenn die Breite von UIWebView kleiner ist als die Breite des Fensters

Ich habe ein einfaches Testprojekt erstellt, das nur eine UIWebView auf einer UIView enthält, die das Fenster füllt. Wenn die Breite des UIWebViews die gleiche ist wie die des UIViews, funktioniert alles gut. Wenn die Breite des UIWebViews kleiner ist als die Breite des Containers, erscheint die horizontale Bildlaufleiste unregelmäßig. Die Webseite, die ich lade, ist eine lokale html-Datei. Die Breite ist nicht so eingestellt, dass sie der Breite des Browsers/UIWebViews entsprechen sollte.

Bitte um Hilfe. Danke!

The iPad simulator.

0 Stimmen

Die Antwort hängt möglicherweise von den Auszeichnungen in Ihrer lokalen HTML-Datei ab. Gibt es dort etwas (z. B. Stile), das die Breite angibt?

0 Stimmen

Nein, nur einfach <p> Tag wie: <p>text here...</p>

8voto

backspacer Punkte 908

Methode 1. webView.scalePageToFit = YES aber wenn sich die Breite der webView ändert, ändert sich auch die Schriftgröße der Webseite entsprechend. Um dieses Problem zu lösen, können Sie Methode 2 ausprobieren:

Methode 2. die Breite der WebView in Ihrem Objective-C-Code dynamisch einstellen, so dass wenn die Breite der UIWebView geändert wird, die Breite der HTML-Webseite durch Aufruf eines Javascript-Skripts geändert wird.

int webViewWidth = isPortraitOrLandscape ? 768:1024; // the dynamic width of the webView
NSString *javascript = [NSString stringWithFormat:@"document.getElementsByTagName('body')[0].style.width = '%dpx'", webViewWidth];
[webView stringByEvaluatingJavaScriptFromString:javascript];

Auf diese Weise kann die Breite der webView an die tatsächliche HTML-Webseite angepasst werden.

2 Stimmen

Sehr gut. Die erste scheint nicht für mich manchmal zu arbeiten, vor allem bei der Verwendung der UIWebView innerhalb der Detail-Controller eines splitiviewcontroller (keine Ahnung, warum). Der zweite Ansatz funktioniert gut, aber ich konnte nur machen es mit dem folgenden JS-String-Format arbeiten @"document.getElementsByTagName('body')[0].style.width = '%1.0fpx'"

4voto

Die oben genannten Lösungen haben nicht ziemlich für mich auch nicht funktionieren. Die Frage will, dass der Text in der entsprechenden Browser-Ansichtsgröße umbrochen wird, der Inhalt nicht nach unten skaliert wird und kein Scrollen möglich ist.

Meine Lösung war es, ein Ansichtsfenster in die HTML zu erzwingen, indem ich etwas hinterhältiges Javascript ausführte:

javascript = [NSString stringWithFormat:@"var viewPortTag=document.createElement('meta');  \
              viewPortTag.id='viewport';  \
              viewPortTag.name = 'viewport';  \
              viewPortTag.content = 'width=%d; initial-scale=1.0; maximum-scale=1.0; user-scalable=0;';  \
              document.getElementsByTagName('head')[0].appendChild(viewPortTag);" , (int)authWebView.bounds.size.width];

[authWebView stringByEvaluatingJavaScriptFromString:javascript];

Je nachdem, ob Sie andere Ansichtseinstellungen benötigen oder nicht, oder ob Ihre Webseite bereits einen Meta-Tag hat, der das Ansichtsfenster angibt, können Sie unterschiedliche Ergebnisse erzielen.

Die Idee zu Javascript stammt aus dieser Antwort: Wie fügt man Metatags ein, ohne jquery append zu verwenden?

0 Stimmen

Eine gute Lösung. Einstellen der Breite wie dies funktionierte gut für mich, wo ich eine eingebettete UIWebView im Landscape-Modus auf iPad verwenden. Sollte es nicht Kommas statt Semikolons obwohl sein?

0 Stimmen

Dies ist auch eine Alternative, wenn Sie ein bestehendes Ansichtsfenster-Tag aktualisieren möchten, anstatt ein neues hinzuzufügen: NSString *javascript = [NSString stringWithFormat:@"document.querySelector('meta[name=\"viewp‌​ort\"]').setAttribut‌​e(\"content\", \"width=%d,initial-scale=1.0,maximum-scale=1.0,user-scalable‌​=0\")", (int)authWebView.bounds.size.width];

1voto

cduhn Punkte 17688

Sie können eine explizite Breite für Ihren Viewport festlegen, indem Sie einen Meta-Tag in Ihre <head> wie diese:

<meta name = "viewport" content = "width = 590">

Siehe die Safari Web Content Guide .

0 Stimmen

Auch ist es nicht gut, wenn Sie die HTML verantwortlich machen wollen, arbeiten auf beiden iphone und ipad (oder sogar Android-Geräte). Auch denken über die Wiederverwendung der HTML, wenn Sie auch alte Android-Geräte Ziel und verwendet Position fixiert (das ist derzeit mein Fall) Sie haben zu verwenden <meta name="viewport" content="width=device-width, user-scalable=no"> caniuse.com/#search=position

0voto

Chetan Bhalara Punkte 10286

Tyr zum Erstellen der Webansicht Modus Skalieren zum Ausfüllen.

0 Stimmen

Wenn UIWebView's Modus Scale Pages to Fit TRUE ist, wird der Text im Hochformat kleiner als im Querformat dargestellt. Denn diese Ansicht ist im Querformat breiter. Das habe ich nicht erwartet.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X