使用自定义字体Zapfino时文本截断问题求助
修复SwiftUI中自定义字体(Zapfino)文本截断问题
在SwiftUI中使用Zapfino这类装饰性自定义字体时,常出现部分字符(比如示例中的"f")被截断的情况,即便文本框本该随内容自动扩展,显式设置frame也无法解决。你的代码如下:
Text(name) .font(Font.custom("Zapfino", size: 48, relativeTo: .title)) .foregroundColor(Color.white) .baselineOffset(48) .padding(10) .background(Color.red)

这是因为Zapfino的特殊字形设计(比如超长的下行线)超出了标准字体的度量范围,SwiftUI的自动布局系统没能正确识别完整的字形边界。以下是几种可行的修复方案:
使用
fixedSize()强制适配内容
给Text添加fixedSize()修饰符,让视图根据文本的实际字形尺寸来布局,不会截断超出默认边界的部分:Text(name) .font(Font.custom("Zapfino", size: 48, relativeTo: .title)) .foregroundColor(Color.white) .baselineOffset(48) .fixedSize() .padding(10) .background(Color.red)调整字体排版度量
通过自定义UIFont的行间距或字形属性,让系统正确识别字体的完整边界。先扩展UIFont添加调整方法:extension UIFont { func withTraits(traits: UIFontDescriptor.SymbolicTraits) -> UIFont { guard let descriptor = self.fontDescriptor.withSymbolicTraits(traits) else { return self } return UIFont(descriptor: descriptor, size: 0) } }再创建调整后的字体用于SwiftUI:
if let uiFont = UIFont(name: "Zapfino", size: 48) { let adjustedFont = uiFont.withTraits(traits: .traitLooseLeading) Text(name) .font(Font(adjustedFont)) .foregroundColor(Color.white) .baselineOffset(48) .padding(10) .background(Color.red) }修正
baselineOffset并增加padding
你设置的baselineOffset(48)可能改变了文本的布局位置,导致下行部分被截断。可以适当减小偏移量,或者针对性增加底部padding:Text(name) .font(Font.custom("Zapfino", size: 48, relativeTo: .title)) .foregroundColor(Color.white) .baselineOffset(32) // 调整偏移值 .padding(.vertical, 15) // 增加垂直方向padding,重点保证底部空间 .background(Color.red)
内容的提问来源于stack exchange,提问作者Sebastian
相关产品推荐
相关产品推荐

