在UIWebView中使用自定义字体

Jor*_*mar 54 fonts truetype uiwebview ios

我想在UIWebView中显示自定义字体.我已经将字体放在"应用程序提供的字体"下的plist中.使用的代码:

        UIWebView *webView = [[UIWebView alloc] initWithFrame:myRect];
        NSURL *baseURL = [NSURL fileURLWithPath:[[NSBundle mainBundle] bundlePath]];
        [webView loadHTMLString:html baseURL:baseURL];
        [self addSubview:webView];
Run Code Online (Sandbox Code Playgroud)

其中html是一个NSString,具有以下内容:

<html><head>
<style type="text/css">
@font-face {
    font-family: gotham_symbol;
    src: local('GOTHAMboldSymbol_0.tff'), format('truetype') 
} 
body { 
 font-family: gotham_symbol;
font-size: 50pt;
}
</style>
</head><body leftmargin="0" topmargin="0">
This is <i>italic</i> and this is <b>bold</b> and this is some unicode: &#1101;
</body></html>
Run Code Online (Sandbox Code Playgroud)

我正在使用iOS 4.2,因此应该支持TTF.我很欣赏一些实际可行的HTML /代码.

Lin*_*ann 102

经过一些尝试和错误后,我找到了一种可靠的方法来加载带有本地CSS的自定义字体.

1.将您的字体添加到应用程序...确保该文件正确定位到应用程序

在此输入图像描述 在此输入图像描述

2.然后将您的字体添加到yourApp-Info.plist

在此输入图像描述

3.运行NSLog(@"Available fonts: %@", [UIFont familyNames]);检查字体/ fontfamily为系统指定的名称...

在此输入图像描述

4.复制该名称并在CSS中使用它们...不需要@ font-face

body {
    font-family:"Liberation Serif";
}
Run Code Online (Sandbox Code Playgroud)

  • 步骤1-3基本上是向应用程序添加自定义字体的标准方式...所以是的,它是记录的.在最后一步中,您使用标准方式调用系统上可用的字体...... :-) (4认同)
  • 对于实际的字体名称,您应该使用:`[UIFont fontNamesForFamilyName:“ Liberation Serif”] (2认同)

Jor*_*mar 14

我最终让它工作,虽然我不确定我上面做错了什么.这是我使用的HTML(NSString*htmll).我添加了所有内容,其中一些可能与解决方案无关.

<html><head><style type="text/css">
@font-face {
font-family: 'gotham_symbol';
src: url('GOTHAMboldSymbols_0.ttf')  format('truetype') 
}
@font-face {
font-family: 'gotham_symbol_italic';
src: url('GothamBoldItalic.ttf')  format('truetype') 
}
#w {display:table;}
#c {display:table-cell; vertical-align:middle;}
i { font-family: 'Helvetica-BoldOblique'; }
</style></head><body topmargin="0" leftmargin="0">
<div style="display: table; width: 320px; height: 50px; #position: relative; overflow: hidden;">
<div style=" #position: absolute; #top: 50%;display: table-cell; vertical-align: middle;">
<div style=" #position: relative; #top: -50%">
<p style="font-size:20px;font-family:'gotham_symbol';color:#97371f;">THE TEXT GOES HERE</p></div></div></div></body></html>
Run Code Online (Sandbox Code Playgroud)

我按如下方式加载UIWebView:

UIWebView *webView = [[UIWebView alloc] initWithFrame:rect];
[webView makeTransparent];
NSURL *baseURL = [NSURL fileURLWithPath:[[NSBundle mainBundle] bundlePath]];
[webView loadHTMLString:html baseURL:baseURL];
Run Code Online (Sandbox Code Playgroud)

  • 奇怪的是,林德曼的另一个解决方案并不适合我,但这确实有效. (2认同)

Joe*_*ind 7

对于 Swift 和 WKWebView,这对我有用:

@IBOutlet weak var webView: WKWebView!


let html = """
<!DOCTYPE html>
<head>
    <style>
        @font-face {
            font-family: 'Raleway-Regular';
            src: url('Raleway-Regular.ttf')  format('truetype')
        }
        img {
            width: 100%;
        }
        body {
            font-family: 'Raleway-Regular';
            font-size: 30px;
        }
    </style>
</head>
<body>
    My HTML Content
</body>
</html>
"""


let baseURL = URL(fileURLWithPath: Bundle.main.bundlePath)
webView.loadHTMLString(html, baseURL: baseURL)
Run Code Online (Sandbox Code Playgroud)

必须像平常一样将字体添加到 XCode 项目中,并复制捆绑资源

<key>UIAppFonts</key>
<array>
    <string>Raleway-Bold.ttf</string>
    <string>Raleway-Regular.ttf</string>
</array>
Run Code Online (Sandbox Code Playgroud)

  • 就我而言,baseURL 是秘密,谢谢。 (3认同)