iPhone开发 - 设置UIWebView字体

46

我需要展示从服务器获取的富文本,因此我正在使用UIWebView。现在的问题是我无法控制UIWebView中使用的字体。如何将字体更改为系统字体(使其与应用程序的其余部分一致)?

目前我的做法类似于这样:

myRichTextView = [[UIWebView alloc] initWithFrame:CGRectMake(x, y, width, height)];
myRichTextView.backgroundColor = [UIColor clearColor];
[myRichTextView setScalesPageToFit:NO];
[myRichTextView loadHTMLString:myString baseURL:[NSURL URLWithString:myBaseURL]];

再次需要控制显示字体。如果无法控制字体,请告知其他替代UIWebView的方案。

谢谢


如果你正在从服务器拉取数据,那么myString的字符串是什么?难道不是所有的文本都来自服务器吗? - Ethan Parker
9个回答

103

我修改了字符串,然后它就起作用了。你是对的,Chris,这个修改不应该有任何影响。

NSString *myDescriptionHTML = [NSString stringWithFormat:@"<html> \n"
                                "<head> \n"
                                "<style type=\"text/css\"> \n"
                                "body {font-family: \"%@\"; font-size: %@;}\n"
                                "</style> \n"
                                "</head> \n"
                                "<body>%@</body> \n"
                                "</html>", @"helvetica", [NSNumber numberWithInt:kFieldFontSize], content];

2
好的,没错。还有一个疑问,哪种HTML字体等同于iOS中的“SystemFont”?希望这不是一个需要发布新问题的大问题…… - Deepukjayan
15
我一直在等待苹果允许用户更改系统字体。所以我采取了一个微小的步骤。我使用 UIFont *font = [UIFont systemFontOfSize:21];,而不是硬编码 @"helvetica",我将 font.familyName 放入其中。 - DBD
1
自从iOS9以来,fontName将会是类似于.SFUIText-Regular这样的东西,这在HTML中无法使用。 - Daniel

22
将CSS样式表与HTML文档关联,或将样式信息放在HTML文档的顶部。

15

我在Web视图中使用以下CSS来实现你所说的功能。

body
{
    font-family:helvetica;
}

但是您的代码看起来也应该能正常工作。奇怪。我唯一能看到的区别是字体与字体族,但这不应该有影响。

chris。


没错,这个可行。如果字体名称中有空格,你需要用引号括起来,例如“Helvetica Neue”,无衬线字体。 - B-Money

11

系统字体

-apple-system 在iOS 9和Safari OS X 10上使用

font-family: -apple-system;
font-family: '-apple-system','HelveticaNeue'; // iOS 8 compatible

10

我创建了一个方法,可以将一些文本包裹在具有给定UIColorUIFont的正确样式的HTML body中。这个方法是基于Mustafa的答案

使用方法如下:

NSString * htmlString = [MyClass htmlFromBodyString:@"an <b>example</b>"
                                           textFont:[UIFont systemFontOfSize:10]
                                          textColor:[UIColor grayColor]];
[webView loadHTMLString:htmlString baseURL:nil];

谢谢这个方法!@Robert,它很有用! - benLIVE
完美运行。谢谢! - Apfelsaft

6

另一种对我有效的简单方法

    UIFont *font = [UIFont systemFontOfSize:15];

      NSString *htmlString = [NSString stringWithFormat:@"<span style=\"font-family:Helvetica; font-size: %i\">%@</span>",
                     (int) font.pointSize,
                     [bodyText stringWithNewLinesAsBRs]];
       [myWebView loadHTMLString:htmlString baseURL:nil];

4

只需要将

font:helvetica

改为

font-family:helvetica

即可。


2

我使用

body {
        font-family: 'Noteworthy-Bold';
    }

这对我的关于页面(WebView)非常有效,因为我应用程序的其余部分也使用了苹果的“Noteworthy-Bold”字体。

如果你想使用自己的字体,请使用@font-face并引用TTF或EOT文件。


2
这是一个易于使用和扩展的解决方案,并带有更多字体设置:
                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];

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接