2009-10-25 9 views
36

, así que tengo UIWebView en mi aplicación y cargo algo de HTML (artículo), pongo algo de CSS para que todo sea más agradable. Eso es simple y claro y todo es perfecto hasta que intente agregar lectura en la funcionalidad de paisaje y luego me di cuenta de que UIWebView ignora cualquier css "font-size" que he puesto en HTML y aumenta el tamaño de fuente drásticamente después de rotar al modo horizontal.UIWebView cambia el tamaño del texto después de rotar: buscando una explicación para un error mágico o mi estupidez

He pasado unas 4-5 horas (soy nuevo en la aplicación de programación de Iphone, pero soy bastante terco cuando se trata de hacer algo bien) tratando de arreglarlo. Intenté muchas opciones de configuración, NADA.

Y esta noche algo mágico ha sucedido. Basta con mirar a la fuente:

Paisaje con el error:

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

paisaje fijo (tamaño de la fuente no cambia más):

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

Como se puede ver que sólo añadido el mismo código una vez más y el margen aumentado (menos) en un punto. Y setFrame otra vez (no, no arregla el cambio de tamaño con solo un conjunto de setFrames).

Estoy feliz de que funcione, pero me gustaría saber CÓMO y POR QUÉ, así que puedo hacerlo "correctamente", porque ahora el código se ve estúpido y tiene 1 punto de margen alto en la parte inferior de la aplicación.

Y no pregunto por qué he tratado de copiar y pegar el mismo código de nuevo ..

+0

2016 solución: http://stackoverflow.com/a/2711132/294884 – Fattie

Respuesta

27

Y la solución mágica fue:

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

Si sólo se sabía hace esta semana .. Tanto tiempo, tanto los nervios se perdieron ..

+14

Esto no funcionó para mí, pero el anterior -webkit-text-size-adjust: none; CSS lo hizo. Solo FYI – kdbdallas

+0

Esto resolvió mi problema. Acabo de anexar el html después de esa etiqueta y la ventana gráfica se redimensiona como se esperaba. – respectTheCode

+0

hi @sniurkst! ¿podría cambiar la respuesta aceptada por la correcta ahora (7 años después) a continuación? cheers – Fattie

5

es probable que sólo necesita leer este

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

Del mismo modo, si se especifica solo se deduce el ancho de la ventana gráfica , la altura y la escala inicial de . Figura 3-15 muestra la prestación de la misma página web cuando la anchura de visualización se establece en 320. Observe que la orientación vertical se representa lo mismo que en la Figura 3-14, pero la orientación horizontal mantiene una anchura de 320 píxeles, que cambia la escala inicial y tiene el efecto de acercamiento cuando el usuario cambia a orientación horizontal.

+0

Podría explicar cómo podría evitar esto en mi situación? Por cierto, no estoy cargando una página externa, estoy creando html on fly y luego lo estoy cargando en mi vista web. – sniurkst

+0

Gracias, solucioné mi problema y me pusieron en el camino correcto. – sniurkst

2

me trataron su caso, pero sin suerte.

El soluion trabajó para mí era:

[recarga web View];

108

El Safari Web Content Guide también menciona cómo desactivar el autosizing de texto en el CSS, lo que solucionó el problema en mi caso.

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

Funciona para mí también – user366584

+0

Excelente solución. Trabajó para mi. :) – Sam

+0

Sí, esa es la única. –

13

Usando las dos primeras respuestas, la propiedad CSS:

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

y la etiqueta meta:

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

yo era capaz de inyectar tanto en un sitio web existente, el uso de este javascript código:

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

Utilizando el webViewDidFinishLoad del 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]; 

} 
Cuestiones relacionadas