You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何修复SwiftUI中自定义字体ascender与descender被裁切的问题

解决方案

方案1:代码侧快速适配(无需修改字体文件)

这类裁切大多是签名类字体自带的垂直度量值偏小,导致实际渲染的字形超出系统默认计算的Text边界,可通过组合修饰符适配:

  • 搭配使用.baselineOffset()与垂直padding:先用baselineOffset调整文字整体垂直位置解决单侧裁切,再给另一侧添加对应数值的padding预留空间,避免另一侧被裁切。
  • 新增.fixedSize(horizontal: false, vertical: true)修饰符,强制Text垂直方向完全适配内容大小,不受字体默认度量值限制。
  • 无需给Text组件设置固定高度,依靠外层容器的高度即可,修改后的参考代码如下:
struct GroupListHeaderView: View {
    let headerTitle: String
    var body: some View {
        ZStack(alignment: .center) {
            Rectangle().fill(Color.yellow)
            Text(headerTitle)
                .font(Fonts.header)
                .baselineOffset(15) // 可根据实际裁切情况调整数值,解决上侧裁切
                .padding(.bottom, 15) // 与偏移数值对应,给下侧预留空间
                .fixedSize(horizontal: false, vertical: true)
        }
        .frame(height: 100)
    }
}

方案2:根治方案(修改字体文件参数)

如果多个场景都需要使用该字体,可直接修改字体文件的内置度量参数,一劳永逸解决裁切问题:

  1. 用FontForge、Glyphs等字体编辑工具打开Cassandra-Personal字体文件
  2. 调整字体的Ascender(上升部)、Descender(下降部)数值,给上下方预留足够的空白空间
  3. 同步修改OS/2表下的winAscent、winDescent、typoAscender、typoDescender参数,保证各平台度量规则一致
  4. 导出修改后的字体文件替换项目中原文件即可,后续使用无需额外添加修饰符

内容的提问来源于stack exchange,提问作者xTwisteDx

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 03:54:04