WKWebView 使用自定义字体

前言

最近公司产品想更改APP整体的字体,并且H5页面的字体也要与APP原生的字体保持一致。

1.APP更改字体

这个比较简单,按照常规方法更改即可
(1).将字体文件放入工程
(2).在info.plist中增加Fonts provided by application 数组类型,并将添加的字体文件添加
(3).找到字体文件对应的具体的我们要用的字体名字

NSArray *fontFamilies = [UIFont familyNames];
for (NSString *fontFamily in fontFamilies){
      NSArray *fontNames = [UIFont fontNamesForFamilyName:fontFamily];
      NSLog (@"%@: %@", fontFamily, fontNames);
 }

(4).在设置font的地方利用

[UIFont fontWithName:@"具体的字体名" size:15];

2.WKWebView更改字体

有多种方案可以实现,本人目前采用的是将字体文件转为base64,然后将baser64通过css注入到webview的页面中。
在WKWebView的代理方法中:

- (void)webView:(WKWebView *)webView didFinishNavigation:(WKNavigation *)navigation

添加如下代码:

NSString *fileUrl = [[NSBundle mainBundle] pathForResource:@"字体文件名" ofType:@"TTF"];
NSData *fileData = [NSData dataWithContentsOfFile:fileUrl];
NSString *boldFont = [fileData base64EncodedStringWithOptions:0];
NSMutableString *javascript = [NSMutableString string];
[javascript appendString:[NSString stringWithFormat:@"\
                              var boldcss = '@font-face { font-family: \"%@\"; src: url(data:font/ttf;base64,%@) format(\"truetype\");} *{font-family: \"%@\" !important;}'; \
                              var head = document.getElementsByTagName('head')[0], \
                              style = document.createElement('style'); \
                              style.type = 'text/css'; \
                              style.innerHTML = boldcss; \
                              head.appendChild(style);",@"字体文件对应的具体的字体名",boldFont,@"字体文件对应的具体的字体名"]];
 [webView evaluateJavaScript:javascript completionHandler:nil];
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 编辑于2019-02-20. 注意:只适用于webview加载本地HTML 1.webview 使用自定义字体cs...
    Cocoa_Coder阅读 5,236评论 12 4
  • Swift1> Swift和OC的区别1.1> Swift没有地址/指针的概念1.2> 泛型1.3> 类型严谨 对...
    cosWriter阅读 11,157评论 1 32
  • 本文系Smallfan(程序猿小风扇)原创内容,转载请在文章开头显眼处注明作者和出处。 分析 在iPhone 6s...
    程序猿小风扇阅读 6,774评论 5 45
  • WKWebView 是苹果在 WWDC 2014 上推出的新一代 webView 组件,用以替代 UIKit 中笨...
    Aiana阅读 4,648评论 1 8
  • 1.基础设施重建 2.太空产业 3.控制天气 4.抵达地心 5.控制地心引力 6.回望过去 7.光速旅行 8.永不...
    徐慧棣阅读 138评论 0 0