2012-09-21 128 views
19

UIWebView默认使用什么字体?我希望能够改变这一点。但我不想这样做的HTML字符串,而是我想有这样的事情:如何更改UIWebView默认字体

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

有没有这样的属性或其他方式?

回答

23

加载到web视图之前就在它前面加上<font face>标签的字符串。

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

*旁注:*它的工作原理,但字体标签已被弃用很久以前,正如其他答案所建议的。总之,不要使用''标签 – Raptor

+1

这也是一个可怕的解决方案,因为你保证会破坏HTML。您将要将和标签包装在外部标签中,这很恐怖。即使它发生了*工作,因为浏览器足够宽容,这并不是原谅这种设计,恕我直言。 – devios1

3

UIWebview使用在HTML中设置的字体。没有'默认字体'。即使没有特别提及字体,您也无法设置它。它都在WebKit中,我们无法访问它。

+0

嗯,太糟糕了。在UITextView中使用setFont属性会很方便。 –

+5

有一个默认字体。所有Web浏览器都有一个默认的字体,当没有指定字体时使用。无论是否可定制都是问题,看起来答案是否定的。 – devios1

20

您可以尝试通过注入一行JavaScript这样的设置字体:

[webView stringByEvaluatingJavaScriptFromString: @"document.body.style.fontFamily = 'GothamRounded-Bold'"]; 
+0

对于字体大小:[webView stringByEvaluatingJavaScriptFromString:@“document.getElementsByTagName('body')[0] .style.fontSize ='15px'”]; –

+0

确保您调用上述脚本_after_加载网页内容,例如来自委托人的webViewDidFinishLoad方法。 – pipacs

38

您可以使用UIFont对象(这样你就可以将其设置和修改更容易),但包裹在span而不是HTML; font标签have been deprecated自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]; 
+1

伟大的方法,一个重要的事情要注意:这是呈现之前显示内容不像JavaScript方法。 –

+0

这种方法的一个缺点是,声明'UIFont'使用一些RAM,只需在字符串和整数中提供字体名称和大小就可以避免这种情况。 – Raptor

+0

这受到了我在提华纳凯斯的回答中提到的同样的问题。简而言之,它会破解你正在显示的页面的HTML。 – devios1

6

这是我易于使用且易于扩展的解决方案,提供更多的字体设置:

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]; 
1

对于斯威夫特,我用这一个在webViewDidFinishLoad

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

有迅速3溶液:

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

我只是把默认的iOS字体在这个例子中

+0

谢谢,它有帮助。字体家族与CSS无法正常工作。 – waki

+0

字体大小呢?如何把这个? – Tejas

1

如果有人在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字符串之前可以添加一个零检查。 在这里,我还通过在span范围的样式中添加颜色选项来更改字体的颜色。这完全是可选的。