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
相关产品推荐
相关产品推荐

