【问题标题】:iOS custom font path for UIWebViewsUIWebViews 的 iOS 自定义字体路径
【发布时间】:2012-02-19 07:34:44
【问题描述】:

我有一个 UIWebView,我有一个自定义字体我想加载到一个可编辑的 html 文档中,我将通过 UIWebView 显示该文档。在我的 SupportingFiles(资源)文件夹中,我有“Nosifer-Regular.ttf”...要在我的 HTML 中使用自定义字体,我需要字体拼贴的路径(URL)...我尝试这样做,但它没有似乎不起作用...有什么想法吗?

bundle = [NSBundle mainBundle];
    pathFont = [bundle bundlePath];
    fontURL = [NSBundle pathForResource:@"Nosifer-Regular" ofType:@"ttf" inDirectory:pathFont];
    path_font = [fontURL stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
    fileAppend = [[NSString alloc] initWithFormat:@"file://"];
    path_font = [[NSString alloc] initWithFormat:@"%@%@", fileAppend, path_font];

HTML (CSS):

@font-face {
  font-family: 'Nosifer';
  font-style: normal;
  font-weight: 400;
  src: local('Nosifer'), local('Nosifer-Regular'), url('%@') format('truetype');
}

%@ 替换为“path_font”(在上面的第一个代码块中定义)

【问题讨论】:

  • 这看起来是一个很好的答案,但我似乎无法让它工作 - 无论我做什么,我的自定义字体(作为资源嵌入)都没有使用。您能否发布一个显示此工作版本的工作代码示例?已接受答案中的扩展 cmets 似乎包含解决方案(例如使用 " 而不是 ',但我不确定在哪里)。
  • 您是从应用程序包中加载内容吗?确保在创建 URL 时传递的 baseURL 参数指向应用的资源文件夹。
  • @nielsbot 谢谢!唯一的问题是,在 iOS CSS 中的 UIWebView 中,字体类型需要双引号,单引号不起作用……这与 CSS 无关(在 REAL CSS 中,任何一个都可以)但是由于某种原因,Apple 对 UIWebViews 进行编程的方式不起作用......我将单引号切换为双引号,并且接受的答案(如下)中的代码运行良好。
  • @AlbertRenshaw, hy,我也在尝试做几乎一样的事情,但没有运气,你认为你可以看看我的问题:stackoverflow.com/questions/50444788/…

标签: ios fonts uiwebview path custom-font


【解决方案1】:

在您的项目中添加您的自定义字体。那么

获取字体名称

 UIFont *font = [UIFont fontWithName:@"Your-Custom-font" size:20];

然后创建html字符串

NSString *htmlHeader=[NSString stringWithFormat:@"<html><head><head><link rel=\"stylesheet\" type=\"text/css\" href=\"file://localhost%@\"></head><body><font face=\"%@\"; size=\"4\">HI</font></body></html>",cssPath,font.familyName];

祝你好运。

【讨论】:

    【解决方案2】:

    首先,在您的info.plist 中添加提交的“应用程序提供的字体”。它将是一个类似

    的数组
    item0 myFont.otf
    item1 anotherFont.ttf
    

    什么的。

    在 HTML 中使用 font-face 添加字体。并将您的字体文件与 html 文件放在同一目录中。如果 HTML 是动态生成的并且没有从 bundle 中显示,那么你应该复制字体。

    祝你好运。

    【讨论】:

    • 我使用的是 font-face 但我应该为 URL 放什么?我尝试只输入 myFont.otf(在我的情况下为“Nosifer-Regular.ttf”)并且它没有加载字体它只是运行默认字体。因此,我尝试使用上面的代码检索字体文件的 URL。我将提供的字体添加到信息 plist 并再次尝试,但仍然没有运气/:
    • 您是否将字体从 bundle 复制到与 HTML 相同的目录?
    • 我将我的 HTML 保存在这个目录中 docsDir = [NSHomeDirectory() stringByAppendingPathComponent:@"Documents"];我 NSLOGGED 字体文件的位置,它们在这里:file:///var/mobile/Applications/************/****.app/AlmonteSnow.ttf跨度>
    • [[NSFileManager defaultManager] copyItemAtPath:src toPath:dst error:&amp;error;
    • 这是我保存然后加载到 WebView 中的 HTML 代码:&lt;html&gt;&lt;head&gt;&lt;style type='text/css'&gt;p.p1 {margin: 0.0px 0.0px 0.0px 30.0px; font: 34.0px;} @font-face { font-family: 'Nosifer'; font-style: normal; font-weight: 400; src: local('Nosifer'), local('Nosifer-Regular'), url('Nosifer-Regular.ttf') format('truetype'); }&lt;/style&gt;&lt;/head&gt;&lt;body allowtransparency='true'&gt;&lt;div style='word-wrap: break-word;'&gt;&lt;p class='p1'&gt;&lt;font style='font-family: 'Nosifer'; font-size:16px;' color='#FF0000'&gt;Insert Text Here&lt;/font&gt;&lt;/p&gt;&lt;/div&gt;&lt;/body&gt;&lt;/html&gt;
    【解决方案3】:

    我在这里得到了一个有效的 html 代码示例。

    <html>
    <head>
        <style type='text/css'>
            p.p1 {margin: 0.0px 0.0px 0.0px 30.0px; font: 34.0px;}
            @font-face {
                font-family: 'Nosifer'; font-style: normal; font-weight: 400; src: local('Nosifer'), local('Nosifer-Regular'), url('Nosifer-Regular.ttf') format('truetype');
            }
    
            .nosifer {
                font-family: Nosifer;
            }
    
            </style>
    </head>
    <body allowtransparency='true'>
        <p class="nosifer">Nosifer ABCabc</p>
    </body>
    

    如您所见,我使用 css 类来更轻松地定义字体。我不确定 font-face 中的所有 CSS 代码是什么意思,但它似乎可以工作。

    我确认您需要在 *-info.plist 文件中的应用程序提供的字体数组中添加“Nosifer-Regular.ttf”(键:应用程序提供的字体)。 顺便说一句,我用谷歌搜索了 Nosifer-Regular.ttf 并在这里的一个嘈杂的网站上找到了它。但它确实有效:http://www.ffonts.net/Nosifer.font.download

    然后,我还能够加载我将在我的案例中使用的 OTF。在 CSS 中,我将格式从 truetype 更改为 opentype。

    【讨论】:

    • 这在 HTML 中应该可以正常工作......这里的问题是我试图在 iOS 上我自己的 UIWebView 中运行它,所以 CSS 中的“url”部分必须使用双引号而不是单引号引号,所以我用 url(\"...\") 替换了 url('....') 再次,这只发生在 iOS 上......你的代码将适用于正常的网站浏览。
    • 我在 iOS 中使用了这段代码。只需将它放在一个 html 文件中,将文件添加到包中,然后将文件加载到 NSString 中...类似于 [[NSString alloc] initWithContentsOfFile ... 它有效,尽管出于我的需要,我找到了一个更好的方法将此与 UILabel 一起使用。一般来说,虽然 iOS 上的文本处理确实很弱:-(
    • 嗯,你用的是什么版本?无论出于何种原因,当我最初发布这个问题时,它对我不起作用!嗯 :) 哈哈
    【解决方案4】:

    以下是将字体添加到 Info.plist 的方法:

        <key>UIAppFonts</key>
        <array>
            <string>Nosifer-Regular.ttf</string>
        </array>
    

    然后按照this other answer使用@font-face。

    【讨论】:

      猜你喜欢
      • 2016-06-10
      • 2014-03-11
      • 2011-11-06
      • 2016-04-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-04-02
      相关资源
      最近更新 更多