将 UIFont 转换为 css 字体样式字符串

问题描述

我有一些这样的UIFont

let regularFont = UIFont.systemFont(ofSize: 18,weight: .regular)
let mediumFont  = UIFont.systemFont(ofSize: 18,weight: .medium)

我在我的 UIKit 组件中使用它们,例如 UILabel

现在我想使用相同的字体在 WKWebView 中渲染一些文本。
我在代码生成了一些 html 模板,但我不知道如何设置 css 字体样式以匹配我给定的 UIFonts。

经过一些猜测,我想出了以下哪种适用于我给定的示例:

<html>
    <head>
        <style>
            body {
                font-family: '.ApplesystemUIFont'; 
                font-size: 18.0;
                font-weight: normal; 
            }
            b {
                font-family: '.ApplesystemUIFont'; 
                font-size: 18.0;
                font-weight: bolder; 
            }
        </style>
    </head>
    <body>
        <p>
            Regular font <b>Medium font</b> Regular font 
        </p>
    </body>
</html>

它可以正常工作,但显然这不成比例(其他权重呢?)。
此外,我已经可以看到我的设计师来找我,声称字体粗细减少了 0.1 左右。

这是我目前的努力。它适用于有限的属性子集(粗体、斜体),但不处理字体粗细。此外,我还没有测试自定义字体,但我猜它不会像那样工作。

extension UIFont {
  func cssstyleString(color: UIColor) -> String {

      let colorString = "rgb( \(CIColor(color: color).red * 255),\(CIColor(color: color).green * 255),\(CIColor(color: color).blue * 255) )"
      // not sure this is right
      let fontFamily = self.fontName == self.familyName
      let fontSize = self.pointSize
      // trait is not quite right for translation into weight. suggestions?
      let fontWeight = self.fontDescriptor.symbolicTraits.contains(.traitBold) ? "bold" : "normal"
      // works for italic only.
      let fontStyle = self.fontDescriptor.symbolicTraits.contains(.traitItalic) ? "italic" : "normal"

      return "font-family: '\(fontFamily)'; font-size: \(fontSize); font-weight: \(fontWeight); font-style: \(fontStyle); color: \(colorString); "
  }
}

所以我的问题是:
从给定的 UIFont 创建 css 样式的最佳方法是什么,尤其是在字体粗细方面?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)