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

iOS设备中如何获取TrueType字体的高度?

问题分析与解决方案

在使用Font.createTrueTypeFont加载自定义TrueType字体并调用getHeight()时,出现模拟器返回正常高度(10)但iPhone 7 Plus设备返回0的问题,可从以下方向排查解决:

可能原因

  • 字体文件未正确打包到iOS应用资源中,设备无法加载字体,导致font对象无效
  • Style.UNIT_TYPE_DIPS单位转换在真机与模拟器上存在兼容性差异
  • 字体加载为异步操作,调用getHeight()时字体尚未完成初始化

解决步骤

1. 验证字体文件的有效性与加载状态

确保字体文件已正确添加到iOS项目资源目录,且打包时被包含。可先校验字体是否加载成功:

if (Font.isFontAvailable("XXXXXXXX")) {
    font = Font.createTrueTypeFont("XXXXXXXX", "XXXXXXXXXX.ttf").derive(36f, Style.UNIT_TYPE_DIPS);
    int height = font.getHeight();
} else {
    // 处理字体加载失败逻辑
}

2. 强制同步加载字体

部分框架(如Codename One)的字体加载在模拟器为同步,真机为异步,可使用同步加载重载方法:

public static Font font = Font.createTrueTypeFont("XXXXXXXX", "XXXXXXXXXX.ttf", true).derive(36f, Style.UNIT_TYPE_DIPS);

3. 调整单位类型或直接使用像素

尝试移除Style.UNIT_TYPE_DIPS,直接使用像素单位指定字体大小:

public static Font font = Font.createTrueTypeFont("XXXXXXXX", "XXXXXXXXXX.ttf").derive(36f);
int height = font.getHeight();

若需适配屏幕密度,可手动计算DPI对应的像素值后传入derive方法。

4. 校验字体对象有效性

调用getHeight()前判断字体对象是否有效,避免因加载失败返回0:

if (font != null) {
    int height = font.getHeight();
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 01:37:05