2012-09-21 42 views
19

¿Qué fuente usa UIWebView de manera predeterminada? Me gustaría poder cambiar eso. Pero no quiero hacerlo en la cadena HTML, en lugar quiero tener algo como:Cómo cambiar la fuente predeterminada de UIWebView

[webView setFont:[UIFont fontWithName:@"GothamRounded-Bold" size:14] 

hay tal propiedad o de alguna otra manera?

Respuesta

23

Sólo prefijo de una etiqueta <font face> a la cadena antes de cargarlos en la web View.

NSString *body = [plist objectForKey:@"foo"]; 
NSString *htmlString = 
    [NSString stringWithFormat:@"<font face='GothamRounded-Bold' size='3'>%@", body]; 
[webView loadHTMLString:htmlString baseURL:nil]; 
+3

* sidenote: * funciona, pero la etiqueta de fuente ya está obsoleta desde hace mucho tiempo, como lo sugiere otra respuesta. En resumen, NO USE la etiqueta ' – Raptor

+1

Esta es también una solución horrible en general, ya que está garantizado para romper el código HTML. Va a envolver las etiquetas y en una etiqueta externa , lo cual es simplemente horrible. Incluso si * sucede * que funciona porque los navegadores son lo suficientemente tolerantes, eso no excusa este tipo de diseño, imo. – devios1

3

UIWebview utiliza la fuente que se establece en el HTML. No hay 'fuente predeterminada'. Incluso si no se menciona específicamente una fuente, no tiene acceso para configurarla. Todo está dentro del WebKit, al que no tenemos acceso.

+0

Hmm, lástima. Sería útil tener una propiedad setFont como está en UITextView. –

+5

Hay una fuente predeterminada. Todos los navegadores web tienen una fuente predeterminada que se utiliza cuando no se especifica ninguna fuente. Si es personalizable o no es la pregunta, y parece que la respuesta es no. – devios1

20

Se podría tratar de establecer la fuente mediante la inyección de una línea de JavaScript así:

[webView stringByEvaluatingJavaScriptFromString: @"document.body.style.fontFamily = 'GothamRounded-Bold'"]; 
+0

Para tamaño de fuente: [webView stringByEvaluatingJavaScriptFromString: @ "document.getElementsByTagName ('body') [0] .style.fontSize = '15px'"]; –

+0

Asegúrese de llamar al script anterior _después_ de cargar el contenido web, p.del método webViewDidFinishLoad del delegado. – pipacs

38

Puede utilizar el objeto UIFont (por lo que se puede establecer y modificar más fácilmente), pero envolver el HTML en un lugar span; font etiquetas have been deprecated desde HTML 4.01.

UIFont *font = [UIFont fontWithName:@"GothamRounded-Bold" size:14]; 

Asumiendo que ya tiene el NSString *htmlString creado, puede utilizar las propiedades de la fuente:

htmlString = [NSString stringWithFormat:@"<span style=\"font-family: %@; font-size: %i\">%@</span>", 
             font.fontName, 
             (int) font.pointSize, 
             htmlString]; 

Alternativamente, usted podría proporcionar los valores en lugar de utilizar un objeto UIFont:

htmlString = [NSString stringWithFormat:@"<span style=\"font-family: %@; font-size: %i\">%@</span>", 
             @"GothamRounded-Bold", 
             14, 
             htmlString]; 
+1

Gran método, una cosa importante a tener en cuenta: Esto se representa antes de mostrar contenido a diferencia del método javascript. –

+0

Una desventaja de este enfoque es declarar que 'UIFont' usa algo de RAM, que se puede evitar simplemente proporcionando el nombre y el tamaño de la fuente en cadena y entero. – Raptor

+0

Esto tiene el mismo problema que mencioné en la respuesta de TijuanaKez. En resumen, es hackish y rompe el HTML de las páginas que está mostrando. – devios1

6

Aquí está mi solución fácil de usar y fácil de ampliar con más configuraciones de fuente:

myHTMLLabel = [[UIWebView alloc] initWithFrame:CGRectMake(myX, myY, myWidth, myHeight)]; 

myHTMLLabel.userInteractionEnabled=NO; 
myHTMLLabel.scalesPageToFit=NO; 

[myHTMLLabel setOpaque:NO]; 
myHTMLLabel.backgroundColor = myBackColor; 

NSString *myHTMLText = [NSString stringWithFormat:@"<html>" 
         "<head><style type='text/css'>" 
         ".main_text {" 
         " display: block;" 
         " font-family:[fontName];" 
         " text-decoration:none;" 
         " font-size:[fontSize]px;" 
         " color:[fontColor];" 
         " line-height: [fontSize]px;" 
         " font-weight:normal;" 
         " text-align:[textAlign];" 
         "}" 
         "</style></head>" 
         "<body> <SPAN class='main_text'>[text]</SPAN></body></html>"]; 

myHTMLText = [myHTMLText stringByReplacingOccurrencesOfString: @"[text]" withString: myText]; 
myHTMLText = [myHTMLText stringByReplacingOccurrencesOfString: @"[fontName]" withString: myFontName]; 
myHTMLText = [myHTMLText stringByReplacingOccurrencesOfString: @"[fontSize]" withString: myFontSize]; 
myHTMLText = [myHTMLText stringByReplacingOccurrencesOfString: @"[fontColor]" withString: myFontColorHex]; 
myHTMLText = [myHTMLText stringByReplacingOccurrencesOfString: @"[textAlign]" withString: myFontAlign]; 


NSLog(@"*** renderHTMLText --> myHTMLText: %@",myHTMLText); 

[myHTMLLabel loadHTMLString:myHTMLText baseURL:nil]; 
1

Para Swift, utilizo éste en webViewDidFinishLoad

webView.stringByEvaluatingJavaScriptFromString("document.getElementsByTagName('body')[0].style.fontFamily =\"HelveticaNeue\""); 
7

No es la solución rápida 3:

func webViewDidFinishLoad(_ webView: UIWebView) { 
    webView.stringByEvaluatingJavaScript(from: "document.getElementsByTagName('body')[0].style.fontFamily =\"-apple-system\"") 
} 

tengo sólo hay que poner la fuente por defecto de iOS para este ejemplo

+0

gracias, es de ayuda. font-family con css no funciona. – waki

+0

¿qué tal el tamaño de letra? cómo poner eso? – Tejas

1

En caso de que alguien esté buscando una solución en Swift 3, utilicé esto (basado en la respuesta de jterry):

let font = UIFont.init(name: "Name-of-your-font", size: theSize) 
self.newsWebView.loadHTMLString("<span style=\"font-family: \(font!.fontName); font-size: \(font!.pointSize); color: #21367B\">\(yourString)</span>", baseURL: nil) 

Tenga en cuenta que aquí no me estoy asegurando de que la fuente sea nula. Se podría agregar una verificación nula antes de cargar la cadena HTML. Aquí también estoy cambiando el color de la fuente agregando la opción de color en el estilo del tramo. Esto es completamente opcional.

Cuestiones relacionadas