如何在 SwiftUI 中使用 SF Rounded 字体?

How to use SF Rounded font in SwiftUI?

我想在我的 SwiftUI 项目中使用 SF 圆角字体,你会如何设置它?

我已经尝试过修改 .font() 但它不起作用(我无法将其设置为这种圆形字体)

Text("Your Text").font(.system(.body, design: .rounded))

我知道问题是关于 SwiftUI 的,但我认为包含 UIKit 答案可能会有所帮助。

let fontSize: CGFloat = 24

// Here we get San Francisco with the desired weight
let systemFont = UIFont.systemFont(ofSize: fontSize, weight: .regular)

// Will be SF Compact or standard SF in case of failure.
let font: UIFont

if let descriptor = systemFont.fontDescriptor.withDesign(.rounded) {
    font = UIFont(descriptor: descriptor, size: fontSize)
} else {
    font = systemFont
}

将@Pomme2Poule 的 UIKit 答案转换为函数以便于使用,以备不时之需。函数也使用动态类型,因此它会随字体大小缩放。

func roundedFont(ofSize style: UIFont.TextStyle, weight: UIFont.Weight) -> UIFont {
    // Will be SF Compact or standard SF in case of failure.
    let fontSize = UIFont.preferredFont(forTextStyle: style).pointSize
    if let descriptor = UIFont.systemFont(ofSize: fontSize, weight: weight).fontDescriptor.withDesign(.rounded) {
        return UIFont(descriptor: descriptor, size: fontSize)
    } else {
        return UIFont.preferredFont(forTextStyle: style)
    }
}

SwiftUI:

中的 Text 对象上这样做对我有用

.font(.system(size: 13.0, weight: .regular, design: .rounded))

我想添加一个额外的用例:如果您想将自定义字体粗细应用于文本字段之类的圆形 SF 字体,同时仍保持动态字体缩放,您可以执行以下操作:

TextField("test", $test)
    .font(Font.system(.largeTitle, design: .rounded).weight(.heavy))

这是必需的,因为不能直接在 TextField 上调用 .fontWeight()(至少从 iOS 13 开始是这样)。