如何解決iOS自定義字體顯示問題-創(chuàng)新互聯(lián)

小編給大家分享一下如何解決iOS自定義字體顯示問題,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!

成都創(chuàng)新互聯(lián)公司是一家集成都網(wǎng)站建設(shè)、成都做網(wǎng)站、網(wǎng)站頁面設(shè)計(jì)、網(wǎng)站優(yōu)化SEO優(yōu)化為一體的專業(yè)網(wǎng)絡(luò)公司,已為成都等多地近百家企業(yè)提供網(wǎng)站建設(shè)服務(wù)。追求良好的瀏覽體驗(yàn),以探求精品塑造與理念升華,設(shè)計(jì)最適合用戶的網(wǎng)站頁面。 合作只是第一步,服務(wù)才是根本,我們始終堅(jiān)持講誠信,負(fù)責(zé)任的原則,為您進(jìn)行細(xì)心、貼心、認(rèn)真的服務(wù),與眾多客戶在蓬勃發(fā)展的市場(chǎng)環(huán)境中,互促共生。

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

設(shè)計(jì)師們的作品總是千變?nèi)f化,為了成就他們,作為程序員的我們只好滿足他們嘍。

所以當(dāng)設(shè)計(jì)師用到一款神奇的字體的時(shí)候,我是不會(huì)拒絕的,就像下面這個(gè)樣子:

為了讓大家能更好的看到這個(gè)問題,我把 label 設(shè)置了一個(gè)背景色,label 的 width 和 height 都等于50?,F(xiàn)在,在 storyboard 中看起來是沒問題的,讓我們 Run 一下:

對(duì)比 system font 字體的 label,明顯感覺這個(gè) DINCondensedC 字體的內(nèi)容是偏上的?。ó?dāng)然不用對(duì)比也能發(fā)現(xiàn))。WTF!

2. 解決思路

2.1 既然是內(nèi)容偏上,那么是否和 content Mode 有關(guān)?

可惜的是,經(jīng)過嘗試,改變 contentMode 并不能對(duì) UILabel 產(chǎn)生任何影響(實(shí)際繪制內(nèi)容中包含下方的空白)。

結(jié)論:不可行

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

這兩種方案應(yīng)該是可行的,但是,為了這個(gè)小字體,用得著這么復(fù)雜的【計(jì)算字體大小】-【通過字體大小與 label 高度計(jì)算偏移量】-【用到這個(gè)字體的 label 統(tǒng)一換成 XXLabel 】流程嗎?

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

結(jié)論:不可行

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

讓我們找到可愛的設(shè)計(jì)師,請(qǐng)他喝個(gè)下午茶,搓頓不錯(cuò)的晚飯,帶他做個(gè)大保健,然后和他說:兄弟這個(gè)UI圖可以換個(gè)字體嗎... 算了成本有點(diǎn)高。

結(jié)論:不可行

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

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

結(jié)論:不可行

3. 最終的解決方案

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

3.1 下載該工具

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

3.2 獲取字體的信息文件

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

3.3 修改字體文件中的信息

讓我們打開這個(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"/>

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

ascender:從字體的 baseLine 到高處的距離descender:從字體的 baseline 到最低點(diǎn)的距離lineGap:印刷線的間距...

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

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

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

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

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

以上是“如何解決iOS自定義字體顯示問題”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內(nèi)容對(duì)大家有所幫助,如果還想學(xué)習(xí)更多知識(shí),歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道!

文章標(biāo)題:如何解決iOS自定義字體顯示問題-創(chuàng)新互聯(lián)
網(wǎng)頁網(wǎng)址:http://bm7419.com/article26/goijg.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供域名注冊(cè)網(wǎng)站導(dǎo)航、靜態(tài)網(wǎng)站、響應(yīng)式網(wǎng)站、手機(jī)網(wǎng)站建設(shè)搜索引擎優(yōu)化

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

微信小程序開發(fā)