2009-10-25 5 views
36

so habe ich UIWebView in meiner Anwendung und ich lade etwas html (Artikel), etwas CSS, um alles schöner zu machen. Das ist einfach und klar und alles ist perfekt, bis ich versuche, das Lesen in der Landschaftsfunktionalität hinzuzufügen, und dann habe ich bemerkt, dass UIWebView CSS-Schriften in HTML ignoriert und die Schriftgröße drastisch erhöht, nachdem ich in den Querformatmodus gewechselt habe.UIWebView skaliert den Text nach dem Drehen: Suche nach Erklärung für magische Fehler oder meine Dummheit

Ich habe etwa 4-5 Stunden (ich bin neu in der Programmierung Iphone-Anwendung, aber ich bin ziemlich stur, wenn es darum geht, etwas richtig zu machen) versucht, es zu beheben. Versucht viele und viele Konfigurationsoptionen - NICHTS.

Und heute Abend ist etwas Magisches passiert. an der Quelle anschauen:

Landschaft mit dem Bug:

r = CGRectMake(0.0, 0.0, 480.0, 320.0); 
[adView.view removeFromSuperview]; 
if (!isFullScreen) { 
    minus = 50 + minus; 
    [controlsView setFrame:CGRectMake(0, r.size.height - 50, r.size.width, 50)];   
} else { 
    minus = 20; 
} 

[textView setFrame:CGRectMake(0, 0, r.size.width, r.size.height - minus)]; 
[scrollView setFrame:CGRectMake(0, 0, r.size.width, r.size.height - minus)]; 

Landschaft fixiert (Schriftgröße mehr ändert sich nicht):

r = CGRectMake(0.0, 0.0, 480.0, 320.0); 
[adView.view removeFromSuperview]; 
if (!isFullScreen) { 
    minus = 50 + minus; 
    [controlsView setFrame:CGRectMake(0, r.size.height - 50, r.size.width, 50)];   
} else { 
    minus = 20; 
} 
[textView setFrame:CGRectMake(0, 0, r.size.width, r.size.height - minus)]; 
[scrollView setFrame:CGRectMake(0, 0, r.size.width, r.size.height - minus)]; 

if (!isFullScreen) { 
    minus = 1 + minus; 
} else { 
    minus = 20+1; 
} 
[textView setFrame:CGRectMake(0, 0, r.size.width, r.size.height - minus)]; 
[scrollView setFrame:CGRectMake(0, 0, r.size.width, r.size.height - minus)]; 

Wie Sie ich nur hinzugefügt sehen den gleichen Code noch einmal und erhöhte Marge (minus) um einen Punkt. Und habe setFrame erneut (nein, es korrigiert nicht die Größenänderung mit nur einer Menge von SetFrames).

Ich bin froh, es funktioniert, aber ich würde gerne wissen, wie und warum, so kann ich es "richtiger Weg", weil jetzt Code sieht blöd aus und haben 1 Punkt Höhe Rand an der Unterseite der Anwendung.

Und fragen Sie nicht, warum ich wieder den gleichen Code zu kopieren versucht haben einzufügen ..

+0

2016 Lösung: http://stackoverflow.com/a/2711132/294884 – Fattie

Antwort

27

Und die magische Lösung war:

<meta name='viewport' content='width=device-width; initial-scale=1.0; maximum-scale=1.0;'> 

Wenn ich nur diese Woche vor wusste .. So viel Zeit, so viel Nerven ..

+14

Das hat bei mir nicht funktioniert, aber das obige -webkit-text-size-adjust: none; CSS hat es getan. Just FYI – kdbdallas

+0

Das löste mein Problem. Ich habe nur den HTML-Code nach diesem Tag angehängt und der Darstellungsbereich wird wie erwartet angepasst. – respectTheCode

+0

Hallo @sniurkst! Könnten Sie die akzeptierte Antwort auf die jetzt richtige (7 Jahre später!) unten ändern? Prost – Fattie

5

Sie wahrscheinlich diese müssen nur lesen

http://developer.apple.com/safari/library/documentation/appleapplications/reference/safariwebcontent/UsingtheViewport/UsingtheViewport.html

Und falls Sie angeben nur die Ansichtsfensterbreite, die Höhe und die anfängliche Skala werden abgeleitet. Abbildung 3-15 zeigt die Wiedergabe der gleichen Webseite, wenn das Ansichtsfenster Breite 320. Hinweis eingestellt wird, dass das Hochformat ist das gleiche wie in Abbildung 3-14 wiedergegeben, aber das Querformat hält eine Breite von 320 Pixel, die ändert die Anfangsskala und hat den Effekt des Zoomens, wenn der Benutzer Querformat ändert.

+0

Könnten Sie erklären, wie könnte ich dies in meiner Situation zu vermeiden? Übrigens lade ich keine externe Seite, ich erstelle html on fly und lade sie dann in meine Webansicht. – sniurkst

+0

Danke, ich habe mein Problem behoben und du hast mich richtig gestellt. – sniurkst

2

verirrt habe ich versucht, Ihren Fall aber keine Glück.

Die soluion für mich gearbeitet wurde:

[webView reload];

108

Die Safari Web Content Guide erwähnt auch, wie die automatische Größenanpassung von Text in der CSS deaktiviert, die das Problem in meinem Fall gelöst hat.

html { 
    -webkit-text-size-adjust: none; /* Never autoresize text */ 
} 
+0

Es funktioniert auch für mich – user366584

+0

Ausgezeichnete Lösung. Arbeitete für mich. :) – Sam

+0

Ja, das ist der eine. –

13

die ersten beiden Antworten verwenden, die CSS-Eigenschaft:

html { 
    -webkit-text-size-adjust: none; /* Never autoresize text */ 
} 

und das Meta-Tag:

<meta name='viewport' content='width=device-width; initial-scale=1.0; maximum-scale=1.0;'> 

konnte ich beide in eine bestehende Website injizieren, um dieses mit Hilfe von Javascript code:

var style = document.createElement(\"style\"); 
document.head.appendChild(style); 
style.innerHTML = "html{-webkit-text-size-adjust: none;}"; 
var viewPortTag=document.createElement('meta'); 
viewPortTag.id="viewport"; 
viewPortTag.name = "viewport"; 
viewPortTag.content = "width=320; initial-scale=1.0; maximum-scale=1.0; user-scalable=0;"; 
document.getElementsByTagName('head')[0].appendChild(viewPortTag); 

Mit Hilfe der webViewDidFinishLoad vom UIWebViewDelegate:

- (void)webViewDidFinishLoad:(UIWebView *)webView{ 

    NSString *javascript = @"var style = document.createElement(\"style\"); document.head.appendChild(style); style.innerHTML = \"html{-webkit-text-size-adjust: none;}\";var viewPortTag=document.createElement('meta');viewPortTag.id=\"viewport\";viewPortTag.name = \"viewport\";viewPortTag.content = \"width=320; initial-scale=1.0; maximum-scale=1.0; user-scalable=0;\";document.getElementsByTagName('head')[0].appendChild(viewPortTag);"; 
    [webView stringByEvaluatingJavaScriptFromString:javascript]; 

} 
Verwandte Themen