web-dev-qa-db-ja.com

UIWebViewのデフォルトフォントを変更する方法

UIWebViewはデフォルトでどのフォントを使用しますか?それを変えたいと思います。しかし、私はhtml文字列でそれをしたくないので、代わりに次のようなものが欲しいです:

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

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

そのようなプロパティまたは他の方法はありますか?

21
Au Ris

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];
44
jterry

WebViewに読み込む前に、文字列の前に<font face>タグを付けるだけです。

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

次のようなJavaScriptの行を挿入することにより、フォントの設定を試みることができます。

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

Swift 3ソリューションがあります:

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

この例ではデフォルトのiOSフォントを配置しました

10
Kevin ABRIOUX

フォント設定を増やした、使いやすく拡張しやすいソリューションを次に示します。

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

誰かが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チェックを追加できます。ここでは、スパンのスタイルに色オプションを追加して、フォントの色も変更しています。これは完全にオプションです。

5
Iris

UIWebviewは、HTMLで設定されているフォントを使用します。 「デフォルトのフォント」はありません。フォントが特に言及されていなくても、設定するためのアクセス権はありません。これらはすべてWebKit内にあり、アクセスできません。

3
Ravi

Swiftの場合、webViewDidFinishLoadでこれを使用します

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

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はインライン要素です。つまり、他の要素と同じ行に配置できます

0
Jack