web-dev-qa-db-fra.com

Comment changer la police par défaut UIWebView

Quelle police UIWebView utilise-t-elle par défaut? J'aimerais pouvoir changer cela. Mais je ne veux pas le faire dans la chaîne html, au lieu de cela, je veux avoir quelque chose comme:

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

// Swift
webView.setFont(UIFont(name: "GothamRounded-Bold", size: 14))

existe-t-il une telle propriété ou une autre manière?

21
Au Ris

Vous pouvez utiliser votre objet UIFont (afin de pouvoir le définir et le modifier plus facilement), mais enveloppez plutôt le code HTML dans un span; font tags sont déconseillés depuis HTML 4.01 .

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

En supposant que vous avez déjà le NSString *htmlString créé, vous pouvez utiliser les propriétés de la police:

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

Alternativement, vous pouvez simplement fournir les valeurs au lieu d'utiliser un objet UIFont:

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

Il suffit de préfixer un <font face> tag dans votre chaîne avant de charger dans la webView.

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

Vous pouvez essayer de définir la police en injectant une ligne de JavaScript comme ceci:

[webView stringByEvaluatingJavaScriptFromString: @"document.body.style.fontFamily = 'GothamRounded-Bold'"];
20
William Niu

Il existe la solution Swift 3:

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

Je viens de mettre la police iOS par défaut pour cet exemple

10
Kevin ABRIOUX

Voici ma solution facile à utiliser et à développer avec plus de paramètres de police:

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];
6
Al-Noor Ladhani

Dans le cas où quelqu'un cherche une solution dans Swift 3, je l'ai utilisé (basé sur la réponse 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)

Sachez qu'ici, je ne m'assure pas que la police n'est pas nulle. Une vérification nulle pourrait être ajoutée avant de charger la chaîne HTML. Ici, je change également la couleur de la police en ajoutant l'option de couleur dans le style de la plage. C'est complètement facultatif.

5
Iris

UIWebview utilise la police définie dans le code HTML. Il n'y a pas de "police par défaut". Même si aucune police n'est spécifiquement mentionnée, vous n'avez pas accès à la définir. Tout est à l'intérieur du WebKit, auquel nous n'avons pas accès.

3
Ravi

Pour Swift, j'utilise celui-ci dans webViewDidFinishLoad

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

Solution rapide pour Swift 4.2

    let fontName =  "PFHandbookPro-Regular"
    let fontSize = 20
    let fontSetting = "<span style=\"font-family: \(fontName);font-size: \(fontSize)\"</span>"
    webView.loadHTMLString( fontSetting + myHTMLString, baseURL: nil)

span est un élément en ligne, ce qui signifie qu'il peut être sur une ligne avec d'autres éléments

0
Jack