Как изменить шрифт по умолчанию UIWebView
Какой шрифт использует UIWebView по умолчанию? Я хотел бы иметь возможность изменить это. Но я не хочу делать это в строке html, вместо этого хочу иметь что-то вроде:
[webView setFont:[UIFont fontWithName:@"GothamRounded-Bold" size:14]
существует ли такое свойство или каким-либо другим способом?
Ответы
Ответ 1
Просто добавьте тег <font face>
к своей строке перед загрузкой в webView.
NSString *body = [plist objectForKey:@"foo"];
NSString *htmlString =
[NSString stringWithFormat:@"<font face='GothamRounded-Bold' size='3'>%@", body];
[webView loadHTMLString:htmlString baseURL:nil];
Ответ 2
Вы можете использовать ваш объект UIFont
(чтобы его можно было легко установить и изменить), но вместо этого оберните HTML в span
; font
теги устарели с HTML 4.01.
UIFont *font = [UIFont fontWithName:@"GothamRounded-Bold" size:14];
Предполагая, что вы уже создали NSString *htmlString
, вы можете использовать свойства шрифта:
htmlString = [NSString stringWithFormat:@"<span style=\"font-family: %@; font-size: %i\">%@</span>",
font.fontName,
(int) font.pointSize,
htmlString];
В качестве альтернативы вы можете просто указать значения вместо использования объекта UIFont
:
htmlString = [NSString stringWithFormat:@"<span style=\"font-family: %@; font-size: %i\">%@</span>",
@"GothamRounded-Bold",
14,
htmlString];
Ответ 3
Вы можете попробовать установить шрифт, введя строку JavaScript следующим образом:
[webView stringByEvaluatingJavaScriptFromString: @"document.body.style.fontFamily = 'GothamRounded-Bold'"];
Ответ 4
Существует быстрое решение 3:
func webViewDidFinishLoad(_ webView: UIWebView) {
webView.stringByEvaluatingJavaScript(from: "document.getElementsByTagName('body')[0].style.fontFamily =\"-apple-system\"")
}
Я только что поместил шрифт iOS по умолчанию для этого примера
Ответ 5
Вот мое простое в использовании и легко расширяемое решение с большим количеством настроек шрифта:
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
UIWebview
использует шрифт, установленный в HTML. Не существует шрифта по умолчанию. Даже если шрифт не упоминается конкретно, у вас нет доступа к его настройке. Все это внутри WebKit, к которому у нас нет доступа.
Ответ 7
Для Swift я использую это в webViewDidFinishLoad
webView.stringByEvaluatingJavaScriptFromString("document.getElementsByTagName('body')[0].style.fontFamily =\"HelveticaNeue\"");
Ответ 8
Если кто-то ищет решение в Swift 3, я использовал это (на основе 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)
Помните, что здесь я не уверен, что шрифт не ноль. Перед загрузкой строки HTML можно добавить проверку nil.
Здесь я также изменяю цвет шрифта, добавляя параметр цвета в стиле span. Это полностью необязательно.