SwiftUI 可能会使用hhea
(Horizontal header table) 的值来设置Text
框高度。在您的情况下,Catamaran 的上升器为 1100,下降器为 540。盒子高度将计算为这两个值的总和:540 + 1100 = 1640。字体的 UPM (Units per Em) 默认为1000。这意味着在 SwiftUI 中,当.font(.custom(..., size: 1000))
设置时,每一行都Text()
会有一个高度为1640的框架。
就 而言.lineSpacing()
,SwiftUI 没有设置基线之间的间距值,而是设置两个框之间的间距。如果您希望在下面的示例中两个框之间没有间距,遗憾的是不允许设置.lineSpacing()
为-(1640-1000) = -640
(不接受负值)。
更新:一种UIViewRepresentable
方法
但是,您可以UILabel
改为使用来减少行高:
struct CustomText: UIViewRepresentable {
let text: String
let font: UIFont
func makeUIView(context: Context) -> UILabel {
let label = UILabel()
label.font = font
label.numberOfLines = 0
let attributedString = NSMutableAttributedString(string: text)
let paragraphStyle = NSMutableParagraphStyle()
paragraphStyle.lineHeightMultiple = 0.6 // <- Reduce lineHeight with a <1 factor
attributedString.addAttribute(NSAttributedString.Key.paragraphStyle,
value: paragraphStyle,
range: NSMakeRange(0, attributedString.length))
label.attributedText = attributedString
return label
}
func updateUIView(_ uiView: UILabel, context: Context) { }
}
用法:
CustomText(text: "Foggy Days\nGo Nowhere",
font: UIFont(name: "Catamaran", size: 1000)!)