首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計疑難解答

iOS 自定義字體設置後文字上移的原因及解決方案

     編輯:程式設計疑難解答

問題現象

在 iOS 專案中加入 `DINCond-Bold.otf` 自定義字體後,設置到 `UILabel` 或 `UITextView` 發現文字整體向上偏移,不再垂直居中,影響視覺效果。

可能原因

  1. 字體本身的度量屬性設計:該字體文件內部的 `ascender`、`descender`、`lineGap` 等垂直度量值可能與系統字體差異較大,導致渲染基線偏移。
  2. 字體文件製作缺陷:部分第三方字體在設計時未正確設置垂直度量,造成 iOS Core Text 排版時計算錯誤。
  3. 行高設置不當:若同時設置了 `lineHeight` 或 `minimumLineHeight`,可能加劇偏移。

排查與解決步驟

1. 驗證字體文件

使用 macOS 自帶的「字體簿」打開 `.otf` 文件,查看預覽中文字是否偏移。若預覽正常,問題可能在代碼設置;若預覽也偏移,則是字體文件本身的問題。

2. 嘗試替換字體

換用其他同風格字體(如 `DIN Alternate`、`Helvetica Neue Condensed Bold` 等)測試,若新字體正常,說明原字體文件有缺陷。

3. 代碼層面微調(若必須使用該字體)

// 方案一:調整 UILabel 的垂直對齊
label.contentVerticalAlignment = .center
// 方案二:使用 NSAttributedString 微調 baselineOffset
let attrStr = NSMutableAttributedString(string: "文字")
attrStr.addAttribute(.font, value: UIFont(name: "DINCond-Bold", size: 17)!, range: NSRange(location: 0, length: attrStr.length))
attrStr.addAttribute(.baselineOffset, value: -2, range: NSRange(location: 0, length: attrStr.length)) // 視實際偏移量調整
label.attributedText = attrStr

4. 檢查 Info.plist 字體註冊

確認 `Fonts provided by application` 陣列中已正確包含該字體文件名,且 Target Membership 勾選正確。

最佳實踐建議

  • 優先選用 Apple 官方提供或知名字體廠商發布的字體,減少度量問題。
  • 引入新字體後,在不同裝置尺寸、動態類型大小下充分測試。
  • 若專案允許,考慮使用系統字體 `UIFont.systemFont(ofSize:weight:)` 配合 `UIFontDescriptor` 實現類似視覺效果,避免打包字體文件增加包體積。

結論:多數情況下是字體文件本身的垂直度量設計導致,更換字體是最徹底的解決辦法;若不可更換,可通過 `baselineOffset` 微調補救。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved