麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 系統 > iOS > 正文

iOS自定義字體顯示問題的完美解決方法

2019-10-21 18:21:59
字體:
來源:轉載
供稿:網友

前言

本篇文章講的是在實際項目中碰到一款自定義字體在展示上出現問題,然后運用先進的蘋果爸爸的工具來解決這個問題的故事。

下面話不多說了,來一起看看詳細的介紹吧

1. 自定義字體出什么問題了?

設計師們的作品總是千變萬化,為了成就他們,作為程序員的我們只好滿足他們嘍。

所以當設計師用到一款神奇的字體的時候,我是不會拒絕的,就像下面這個樣子:

iOS,字體

為了讓大家能更好的看到這個問題,我把 label 設置了一個背景色,label 的 width 和 height 都等于50。現在,在 storyboard 中看起來是沒問題的,讓我們 Run 一下:

iOS,字體

對比 system font 字體的 label,明顯感覺這個 DINCondensedC 字體的內容是偏上的!(當然不用對比也能發現)。WTF!

2. 解決思路

2.1 既然是內容偏上,那么是否和 content Mode 有關?

可惜的是,經過嘗試,改變 contentMode 并不能對 UILabel 產生任何影響(實際繪制內容中包含下方的空白)。

結論:不可行

2.2 繼承 UILabel 并重寫 drawRect ?利用 CoreText 繪制字體?

這兩種方案應該是可行的,但是,為了這個小字體,用得著這么復雜的【計算字體大小】-【通過字體大小與 label 高度計算偏移量】-【用到這個字體的 label 統一換成 XXLabel 】流程嗎?

萬一哪天設計師說:來,咱們來個富文本,中間這幾個字用 DINCondensedC 字體,兩邊的字用 system 字體,那你不是要哭了?

結論:不可行

2.3 程序解決不了,那就用人解決吧

讓我們找到可愛的設計師,請他喝個下午茶,搓頓不錯的晚飯,帶他做個大保健,然后和他說:兄弟這個UI圖可以換個字體嗎... 算了成本有點高。

結論:不可行

2.4 可否從字體入手,自己修改字體?

既然字體有點不太正常,那么我們只能使出大招:自己動手修改這個字體。據說有一款 App:Glyphs 對于制作/修改字體來說,很強大!然后讓我們好好下載,靜靜等待吧。下載完畢打開這個【PT DIN Condensed Cyrillic.ttf】字體文件,沒想到這個軟件還收費,只能試用幾天。試用就使用吧,但是,這個字體里的每個字符我都要一個一個去改?作為程序員,不能忍!

結論:不可行

3. 最終的解決方案

最后還是得靠蘋果爸爸,大家的好爸爸。蘋果提供了一款字體修改工具:Apple Font Tool Suite。下面就讓我們用該工具來解決這個棘手的問題。

3.1 下載該工具

進入這里,滾到最下方,可以看到【Apple Font Tool Suite】,點擊下方的下載,下載一個適合自己 Xcode 版本,下載完成后無腦安裝。

3.2 獲取字體的信息文件

打開終端,輸入:ftxdumperfuser -t hhea -A d PT/ DIN/ Condensed/ Cyrillic.ttf,前面的【ftxdumperfuser -t hhea -A d 】為指令,后面的為你的字體文件路徑。最后回車,你會看到同級文件夾下回多出一個【DINCondensedC.hhea.xml】文件:

iOS,字體

3.3 修改字體文件中的信息

讓我們打開這個字體文件,你會看到:

<?xml version="1.0" encoding="UTF-8" standalone="no" ?><!DOCTYPE hheaTable [<!ELEMENT hheaTable EMPTY><!ATTLIST hheaTable versionMajor CDATA #IMPLIED	versionMinor CDATA #IMPLIED	ascender CDATA #IMPLIED	descender CDATA #IMPLIED	lineGap CDATA #IMPLIED	advanceWidthMax CDATA #IMPLIED	minLeftSideBearing CDATA #IMPLIED	minRightSideBearing CDATA #IMPLIED	xMaxExtent CDATA #IMPLIED	caretSlopeRise CDATA #IMPLIED	caretSlopeRun CDATA #IMPLIED	caretOffset CDATA #IMPLIED	metricDataFormat CDATA #IMPLIED	numberOfHMetrics CDATA #IMPLIED>]><!--	Data generated 	Sun Aug 13 18:51:10 2017	Generated by ftxdumperfuser build 347,		FontToolbox.framework build 257	Font full name: 'PT DIN Condensed Cyrillic'	Font PostScript name: 'DINCondensedC'--><hheaTable	versionMajor="1"	versionMinor="0"	ascender="700"	descender="-209"	lineGap="68"	advanceWidthMax="889"	minLeftSideBearing="-270"	minRightSideBearing="-22"	xMaxExtent="844"	caretSlopeRise="1"	caretSlopeRun="0"	caretOffset="0"	metricDataFormat="0"	numberOfHMetrics="234"	/>

沒錯這是個 XML 文件,它里面包含了字體的一些公共信息:

  • ascender:從字體的 baseLine 到最高處的距離
  • descender:從字體的 baseline 到最低點的距離
  • lineGap:印刷線的間距
  • ...

這里面的每一項信息,都可以從蘋果的:hheaTable文檔 這篇文檔中找到。文檔中可以看到,一款字體也是一個大工程。
今天我們要解決的,是【DINCondensedC】字體偏上的問題,因此,讓我們來調節調節 ascender 這個屬性,將它從700改為900,然后保存文件。

3.4 將修改完的文件注入原 ttf 文件

打開終端,輸入:ftxdumperfuser -t hhea -A f PT/ DIN/ Condensed/ Cyrillic.ttf,注意這里 -A 后面的 d 已經換成了 f ,回車。

3.5 替換原工程中的字體文件

切回我們的工程,替換原字體文件,Run 一下:

iOS,字體

問題已解決!

4. Demo地址

點擊這里直達倉庫

  • CustomFontIssues 為字體有問題的工程
  • CustomFontIssuesResolve 為已解決字體問題的工程

歡迎品嘗~

總結

以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作具有一定的參考學習價值,如果有疑問大家可以留言交流,謝謝大家對VEVB武林網的支持。


注:相關教程知識閱讀請移步到IOS開發頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 久久成人综合网 | 欧美激情视频一区二区免费 | 亚洲欧美日韩免费 | 黄wwww| 国产一级毛片视频在线! | 色综合久久99| 免费看成人毛片 | 国产欧美日韩在线不卡第一页 | 热99精品视频 | 广州毛片 | 亚洲va久久久噜噜噜久久男同 | 国产中文av在线 | 草逼一区| 午夜精品成人 | 色视频欧美 | 亚洲91精品 | 黄色免费在线网站 | av在线不卡免费 | 99激情视频 | 欧美福利视频一区二区 | 日韩字幕 | 国产精品美女久久久免费 | av观看国产 | 精品一区二区三区免费看 | 视频一区二区中文字幕 | 亚州综合网 | 得得啪在线 | 久久久日韩精品一区二区三区 | 国产精品久久久久久久久久尿 | a级高清免费毛片av在线 | 九九视频在线观看6 | 黄色的视频免费观看 | 日韩精品久久久久久久九岛 | 久久国产精品二国产精品中国洋人 | 久久久婷婷一区二区三区不卡 | a视频在线免费观看 | 中文字幕专区高清在线观看 | 成人免费在线播放 | 国产毛片在线看 | 日韩视频在线观看免费视频 | 3344永久免费 |