【问题标题】:How do I set a weight to SF Symbols for iOS 13?如何为 iOS 13 的 SF Symbols 设置权重?
【发布时间】:2019-10-24 09:39:16
【问题描述】:

我有这个

Image(systemName: "arrow.right")

但是我如何使它成为粗体、半粗体等呢?

我正在使用新的 SwiftUI。

【问题讨论】:

    标签: ios swift swiftui sf-symbols


    【解决方案1】:

    使用 font 修饰符时,为您传递的字体设置粗细。

    例如,如果您想使用一种默认文本样式(我推荐,因为它们会适应用户的动态类型设置),您可以这样做:

    Image(systemName: "arrow.right")
      .font(Font.title.weight(.ultraLight))
    

    如果要指定字体大小,可以这样:

    Image(systemName: "arrow.right")
      .font(Font.system(size: 60, weight: .ultraLight))
    

    【讨论】:

    • 我试过了,但这似乎改变了大小而不是重量(粗体、轻体、半粗体等)。除非我误会了?
    • 我的错,是我误会了。我已经更新了我的答案。
    • 对于默认大小,这将是 Font.body.weight(.ultraLight)(例如在 navigationBarItems 中)(all font weights)
    【解决方案2】:

    对于 UIKit,符号可以配置如下:

    UIImage(systemName: "arrow.right",
            withConfiguration: UIImage.SymbolConfiguration(pointSize: 16, weight: .bold))
    

    【讨论】:

      【解决方案3】:

      SwiftUI 1.0

      我只想提一下如何更改粗细以及自定义字体大小。

      HStack(spacing: 40) {
          Image(systemName: "moon.zzz")
              .font(Font.system(size: 60, weight: .ultraLight))
          Image(systemName: "moon.zzz")
              .font(Font.system(size: 60, weight: .light))
          Image(systemName: "moon.zzz")
              .font(Font.system(size: 60, weight: .regular))
          Image(systemName: "moon.zzz")
              .font(Font.system(size: 60, weight: .bold))
      }
      

      【讨论】:

      • 我认为这应该是公认的答案,因为问题是处理 SwiftUI 并且它设置了 .system 字体而不是 .title ← 这可能会干扰其他样式。
      【解决方案4】:

      UIKit SWIFT 5.x

      要设置它们的属性:创建一个配置,然后将其作为参数传递:

      let imageConfig = UIImage.SymbolConfiguration(pointSize: 22, weight: .black, scale: .large)
      let image = UIImage(systemName: "delete.right", withConfiguration: imageConfig)
      

      【讨论】:

        【解决方案5】:

        UIKit -- Swift 5 -- Xcode 11

        如果您想要设置权重(这样您就不会弄乱自动图标大小),请执行以下操作:

        let configuration = UIImage.SymbolConfiguration(weight: .semibold)
        UIImage(systemName: "trash", withConfiguration: configuration)
        

        【讨论】:

          【解决方案6】:

          您也可以用Text 包裹Image。有了它,您可以使用并将fontWeight() 分配给Text

          Text(Image(systemName: "xmark"))
              .fontWeight(.semibold)
          

          【讨论】:

          • 这是 SwiftUI 的最佳解决方案,因为不必设置字体大小。
          猜你喜欢
          • 2019-10-20
          • 2020-12-22
          • 1970-01-01
          • 2021-10-16
          • 2020-01-24
          • 2021-07-11
          • 1970-01-01
          • 1970-01-01
          • 2020-01-30
          相关资源
          最近更新 更多