【问题标题】:How to change WKWebView or UIWebView default font如何更改 WKWebView 或 UIWebView 默认字体
【发布时间】:2012-09-14 01:09:37
【问题描述】:

UIWebViewWKWebView 默认使用什么字体?我希望能够改变这一点。但我不想在 html 字符串中这样做,而是我想要类似的东西:

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

// swift
webView.setFont(UIFont(name: "GothamRounded-Bold", size: 14))

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

【问题讨论】:

    标签: ios objective-c swift uiwebview wkwebview


    【解决方案1】:
    func webView(_ webView: WKWebView, didFinish navigation: WKNavigation!)
    {
         webView.evaluateJavaScript("document.getElementsByTagName('body')[0].style.fontFamily =\"-apple-system\"")
         webView.evaluateJavaScript("document.getElementsByTagName('body')[0].style.fontSize = \"xx-large\"")
    }
    

    奖励点给熟悉 js 的人将其合并到一个评估中

    span 标签中的包装在 wkwebview 中的影响为零

    【讨论】:

      【解决方案2】:

      SWIFT 4.2 的快速解决方案

          let fontName =  "PFHandbookPro-Regular"
          let fontSize = 20
          let fontSetting = "<span style=\"font-family: \(fontName);font-size: \(fontSize)\"</span>"
          webView.loadHTMLString( fontSetting + myHTMLString, baseURL: nil)
      

      span 是一个内联元素,意思是它可以和其他元素在一条线上

      【讨论】:

        【解决方案3】:

        如果有人在 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)
        

        请注意,这里我不确定字体是否为 nil。在加载 HTML 字符串之前可以添加一个 nil 检查。 在这里,我还通过在跨度样式中添加颜色选项来更改字体的颜色。这是完全可选的。

        【讨论】:

          【解决方案4】:

          有 swift 3 解决方案:

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

          我刚刚为这个例子放了默认的 iOS 字体

          【讨论】:

          • 谢谢,有帮助。带有 css 的字体系列不起作用。
          • 字体大小呢?怎么说呢?
          • @Tejas let preferences = WKPreferences() preferences.minimumFontSize = 17
          【解决方案5】:

          对于 Swift,我在 webViewDidFinishLoad 中使用了这个

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

          【讨论】:

            【解决方案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];
            

            【讨论】:

              【解决方案7】:

              您可以使用 UIFont 对象(这样您就可以更轻松地设置和修改它),但将 HTML 包装在 span 中; 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];
              

              【讨论】:

              • 很棒的方法,需要注意的重要一点:与 javascript 方法不同,这是在显示内容之前呈现的。
              • 这种方法的一个缺点是,声明 UIFont 会占用一些 RAM,这可以通过仅提供字符串和整数的字体名称和大小来避免。
              • 这与我在 TijuanaKez 的回答中提到的问题相同。简而言之,它很骇人听闻,会破坏您正在显示的页面的 HTML。
              【解决方案8】:

              在加载到 webView 之前,只需为您的字符串添加一个 &lt;font face&gt; 标记即可。

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

              【讨论】:

              • sidenote: 它可以工作,但是字体标签很久以前就已经被弃用了,正如其他答案所建议的那样。总之,不要使用&lt;font&gt;标签
              • 这通常也是一个可怕的解决方案,因为你保证会破坏 HTML。您将把 和 标记包装在外部 标记中,这太可怕了。即使它碰巧因为浏览器足够宽容而起作用,但这也不能成为这种设计的借口,imo。
              【解决方案9】:

              您可以尝试通过注入一行 JavaScript 来设置字体,如下所示:

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

              【讨论】:

              • 对于字体大小:[webView stringByEvaluatingJavaScriptFromString: @"document.getElementsByTagName('body')[0].style.fontSize = '15px'"];
              • 确保在加载网页内容后调用上述脚本,例如来自委托的 webViewDidFinishLoad 方法。
              【解决方案10】:

              UIWebview 使用 HTML 中设置的字体。没有“默认字体”。即使没有特别提到字体,您也无权设置它。这一切都在我们无法访问的 WebKit 中。

              【讨论】:

              • 嗯,太糟糕了。像在 UITextView 中一样拥有 setFont 属性会很方便。
              • 有一个默认字体。所有 Web 浏览器都有一个默认字体,当没有另外指定字体时使用该字体。是否可定制是个问题,似乎答案是否定的。
              猜你喜欢
              • 2011-06-23
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2023-02-03
              • 2017-11-25
              • 2014-09-27
              相关资源
              最近更新 更多