- 資訊首頁(yè) > 開(kāi)發(fā)技術(shù) >
- 如何解決iOS自定義字體顯示問(wèn)題
小編給大家分享一下如何解決iOS自定義字體顯示問(wèn)題,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!
1. 自定義字體出什么問(wèn)題了?
設計師們的作品總是千變萬(wàn)化,為了成就他們,作為程序員的我們只好滿(mǎn)足他們嘍。
所以當設計師用到一款神奇的字體的時(shí)候,我是不會(huì )拒絕的,就像下面這個(gè)樣子:
為了讓大家能更好的看到這個(gè)問(wèn)題,我把 label 設置了一個(gè)背景色,label 的 width 和 height 都等于50?,F在,在 storyboard 中看起來(lái)是沒(méi)問(wèn)題的,讓我們 Run 一下:
對比 system font 字體的 label,明顯感覺(jué)這個(gè) DINCondensedC 字體的內容是偏上的?。ó斎徊挥脤Ρ纫材馨l(fā)現)。WTF!
2. 解決思路
2.1 既然是內容偏上,那么是否和 content Mode 有關(guān)?
可惜的是,經(jīng)過(guò)嘗試,改變 contentMode 并不能對 UILabel 產(chǎn)生任何影響(實(shí)際繪制內容中包含下方的空白)。
結論:不可行
2.2 繼承 UILabel 并重寫(xiě) drawRect ?利用 CoreText 繪制字體?
這兩種方案應該是可行的,但是,為了這個(gè)小字體,用得著(zhù)這么復雜的【計算字體大小】-【通過(guò)字體大小與 label 高度計算偏移量】-【用到這個(gè)字體的 label 統一換成 XXLabel 】流程嗎?
萬(wàn)一哪天設計師說(shuō):來(lái),咱們來(lái)個(gè)富文本,中間這幾個(gè)字用 DINCondensedC 字體,兩邊的字用 system 字體,那你不是要哭了?
結論:不可行
2.3 程序解決不了,那就用人解決吧
讓我們找到可愛(ài)的設計師,請他喝個(gè)下午茶,搓頓不錯的晚飯,帶他做個(gè)大保健,然后和他說(shuō):兄弟這個(gè)UI圖可以換個(gè)字體嗎... 算了成本有點(diǎn)高。
結論:不可行
2.4 可否從字體入手,自己修改字體?
既然字體有點(diǎn)不太正常,那么我們只能使出大招:自己動(dòng)手修改這個(gè)字體。據說(shuō)有一款 App:Glyphs 對于制作/修改字體來(lái)說(shuō),很強大!然后讓我們好好下載,靜靜等待吧。下載完畢打開(kāi)這個(gè)【PT DIN Condensed Cyrillic.ttf】字體文件,沒(méi)想到這個(gè)軟件還收費,只能試用幾天。試用就使用吧,但是,這個(gè)字體里的每個(gè)字符我都要一個(gè)一個(gè)去改?作為程序員,不能忍!
結論:不可行
3. 最終的解決方案
最后還是得靠蘋(píng)果爸爸,大家的好爸爸。蘋(píng)果提供了一款字體修改工具:Apple Font Tool Suite。下面就讓我們用該工具來(lái)解決這個(gè)棘手的問(wèn)題。
3.1 下載該工具
進(jìn)入這里,滾到最下方,可以看到【Apple Font Tool Suite】,點(diǎn)擊下方的下載,下載一個(gè)適合自己 Xcode 版本,下載完成后無(wú)腦安裝。
3.2 獲取字體的信息文件
打開(kāi)終端,輸入:ftxdumperfuser -t hhea -A d PT\ DIN\ Condensed\ Cyrillic.ttf
,前面的【ftxdumperfuser -t hhea -A d 】為指令,后面的為你的字體文件路徑。最后回車(chē),你會(huì )看到同級文件夾下回多出一個(gè)【DINCondensedC.hhea.xml】文件:
3.3 修改字體文件中的信息
讓我們打開(kāi)這個(gè)字體文件,你會(huì )看到:
<?xml version="1.0" encoding="UTF-8" standalone="no" ?><!DOCTYPE hheaTable [<!ELEMENT hheaTable EMPTY><!ATTLIST hheaTable versionMajor CDATA #IMPLIEDversionMinor CDATA #IMPLIEDascender CDATA #IMPLIEDdescender CDATA #IMPLIEDlineGap CDATA #IMPLIEDadvanceWidthMax CDATA #IMPLIEDminLeftSideBearing CDATA #IMPLIEDminRightSideBearing CDATA #IMPLIEDxMaxExtent CDATA #IMPLIEDcaretSlopeRise CDATA #IMPLIEDcaretSlopeRun CDATA #IMPLIEDcaretOffset CDATA #IMPLIEDmetricDataFormat CDATA #IMPLIEDnumberOfHMetrics CDATA #IMPLIED>]><!--Data generated Sun Aug 13 18:51:10 2017Generated by ftxdumperfuser build 347,FontToolbox.framework build 257Font full name: 'PT DIN Condensed Cyrillic'Font PostScript name: 'DINCondensedC'--><hheaTableversionMajor="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"/>
沒(méi)錯這是個(gè) XML 文件,它里面包含了字體的一些公共信息:
ascender:從字體的 baseLine 到最高處的距離descender:從字體的 baseline 到最低點(diǎn)的距離lineGap:印刷線(xiàn)的間距...
這里面的每一項信息,都可以從蘋(píng)果的:hheaTable文檔 這篇文檔中找到。文檔中可以看到,一款字體也是一個(gè)大工程。今天我們要解決的,是【DINCondensedC】字體偏上的問(wèn)題,因此,讓我們來(lái)調節調節 ascender 這個(gè)屬性,將它從700改為900,然后保存文件。
3.4 將修改完的文件注入原 ttf 文件
打開(kāi)終端,輸入:ftxdumperfuser -t hhea -A f PT\ DIN\ Condensed\ Cyrillic.ttf
,注意這里 -A 后面的 d 已經(jīng)換成了 f ,回車(chē)。
3.5 替換原工程中的字體文件
切回我們的工程,替換原字體文件,Run 一下
免責聲明:本站發(fā)布的內容(圖片、視頻和文字)以原創(chuàng )、來(lái)自互聯(lián)網(wǎng)轉載和分享為主,文章觀(guān)點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權請聯(lián)系QQ:712375056 進(jìn)行舉報,并提供相關(guān)證據,一經(jīng)查實(shí),將立刻刪除涉嫌侵權內容。
Copyright ? 2009-2021 56dr.com. All Rights Reserved. 特網(wǎng)科技 特網(wǎng)云 版權所有 珠海市特網(wǎng)科技有限公司 粵ICP備16109289號
域名注冊服務(wù)機構:阿里云計算有限公司(萬(wàn)網(wǎng)) 域名服務(wù)機構:煙臺帝思普網(wǎng)絡(luò )科技有限公司(DNSPod) CDN服務(wù):阿里云計算有限公司 中國互聯(lián)網(wǎng)舉報中心 增值電信業(yè)務(wù)經(jīng)營(yíng)許可證B2
建議您使用Chrome、Firefox、Edge、IE10及以上版本和360等主流瀏覽器瀏覽本網(wǎng)站