UIWebViewはデフォルトでどのフォントを使用しますか?それを変えたいと思います。しかし、私はhtml文字列でそれをしたくないので、代わりに次のようなものが欲しいです:
// obj-c
[webView setFont:[UIFont fontWithName:@"GothamRounded-Bold" size:14]
// Swift
webView.setFont(UIFont(name: "GothamRounded-Bold", size: 14))
そのようなプロパティまたは他の方法はありますか?
UIFont
オブジェクトを使用できます(したがって、設定と変更がより簡単になります)が、代わりにspan
でHTMLをラップします。 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];
WebViewに読み込む前に、文字列の前に<font face>
タグを付けるだけです。
NSString *body = [plist objectForKey:@"foo"];
NSString *htmlString =
[NSString stringWithFormat:@"<font face='GothamRounded-Bold' size='3'>%@", body];
[webView loadHTMLString:htmlString baseURL:nil];
次のようなJavaScriptの行を挿入することにより、フォントの設定を試みることができます。
[webView stringByEvaluatingJavaScriptFromString: @"document.body.style.fontFamily = 'GothamRounded-Bold'"];
Swift 3ソリューションがあります:
func webViewDidFinishLoad(_ webView: UIWebView) {
webView.stringByEvaluatingJavaScript(from: "document.getElementsByTagName('body')[0].style.fontFamily =\"-Apple-system\"")
}
この例ではデフォルトのiOSフォントを配置しました
フォント設定を増やした、使いやすく拡張しやすいソリューションを次に示します。
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];
誰かが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)
ここでは、フォントがnilでないことを確認していないことに注意してください。 HTML文字列を読み込む前に、nilチェックを追加できます。ここでは、スパンのスタイルに色オプションを追加して、フォントの色も変更しています。これは完全にオプションです。
UIWebview
は、HTMLで設定されているフォントを使用します。 「デフォルトのフォント」はありません。フォントが特に言及されていなくても、設定するためのアクセス権はありません。これらはすべてWebKit内にあり、アクセスできません。
Swiftの場合、webViewDidFinishLoad
でこれを使用します
webView.stringByEvaluatingJavaScriptFromString("document.getElementsByTagName('body')[0].style.fontFamily =\"HelveticaNeue\"");
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はインライン要素です。つまり、他の要素と同じ行に配置できます