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?
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];
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];
Vous pouvez essayer de définir la police en injectant une ligne de JavaScript comme ceci:
[webView stringByEvaluatingJavaScriptFromString: @"document.body.style.fontFamily = 'GothamRounded-Bold'"];
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
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];
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.
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.
Pour Swift, j'utilise celui-ci dans webViewDidFinishLoad
webView.stringByEvaluatingJavaScriptFromString("document.getElementsByTagName('body')[0].style.fontFamily =\"HelveticaNeue\"");
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