最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

 更新時間:2019年03月07日 10:18:58   作者:從來吃不胖  
這篇文章主要給大家介紹了關(guān)于iOS自定義字體出問題的完美解決方法,文中通過示例代碼以及圖文介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧

前言

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

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

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

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

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

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

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

2. 解決思路

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

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

結(jié)論:不可行

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

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

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

結(jié)論:不可行

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

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

結(jié)論:不可行

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

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

結(jié)論:不可行

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】文件:

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】字體偏上的問題,因此,讓我們來調(diào)節(jié)調(diào)節(jié) ascender 這個屬性,將它從700改為900,然后保存文件。

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

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

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

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

問題已解決!

4. Demo地址

點擊這里直達倉庫

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

歡迎品嘗~

總結(jié)

以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,如果有疑問大家可以留言交流,謝謝大家對腳本之家的支持。

相關(guān)文章

  • iOS11上Xcode9 AppIcon 圖標(biāo)不顯示

    iOS11上Xcode9 AppIcon 圖標(biāo)不顯示

    升級到iOS11系統(tǒng)下自己的項目桌面app圖標(biāo)不見了,是什么原因呢,經(jīng)過一番查找,終于發(fā)現(xiàn)問題所在,現(xiàn)在分享給大家
    2017-11-11
  • iOS內(nèi)存管理中引用計數(shù)的學(xué)習(xí)

    iOS內(nèi)存管理中引用計數(shù)的學(xué)習(xí)

    文章給大家分享了關(guān)于iOS內(nèi)存管理中引用計數(shù)的相關(guān)知識點,對此有需要的朋友可以跟著學(xué)習(xí)下。
    2018-05-05
  • ios實現(xiàn)自動獲取label高度、寬度及最后一個位置詳解

    ios實現(xiàn)自動獲取label高度、寬度及最后一個位置詳解

    這篇文章主要給大家介紹了關(guān)于ios如何實現(xiàn)自動獲取label高度、寬度及最后一個位置的相關(guān)資料,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧。
    2017-10-10
  • 關(guān)于iOS GangSDK的使用 為App快速集成社群公會模塊

    關(guān)于iOS GangSDK的使用 為App快速集成社群公會模塊

    這篇文章主要介紹了iOS GangSDK的使用為App快速集成社群公會模塊功能的實現(xiàn)過程。
    2017-11-11
  • iOS實現(xiàn)淘寶上拉進入詳情頁交互效果

    iOS實現(xiàn)淘寶上拉進入詳情頁交互效果

    最近遇到一個項目,項目中某個新需求的交互要求仿照淘寶上拉從下往上彈出寶貝詳情。所以死打開淘寶APP仔細看了看,然后自己寫了寫,現(xiàn)在感覺效果差不多了,記錄一下分享給大家,方法自己和大家需要的時候查看借鑒,感興趣的朋友們下面跟著小編一起來學(xué)習(xí)學(xué)習(xí)吧。
    2016-11-11
  • 實例講解iOS音樂播放器DOUAudioStreamer用法

    實例講解iOS音樂播放器DOUAudioStreamer用法

    本篇文章給大家通過實例講解了iOS音樂播放器DOUAudioStreamer用法以及分享了實例代碼,一起學(xué)習(xí)參考下吧。
    2017-12-12
  • 關(guān)于iOS自適應(yīng)cell行高的那些事兒

    關(guān)于iOS自適應(yīng)cell行高的那些事兒

    這篇文章主要給大家介紹了關(guān)于iOS自適應(yīng)cell行高的那些事兒,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面來一看看吧
    2018-11-11
  • iOS開發(fā)實現(xiàn)HTTPS之cer文件的使用詳解

    iOS開發(fā)實現(xiàn)HTTPS之cer文件的使用詳解

    下面小編就為大家分享一篇iOS開發(fā)實現(xiàn)HTTPS之cer文件的使用詳解,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-01-01
  • IOS如何替換電話號碼中間4位為

    IOS如何替換電話號碼中間4位為"-"符號

    這篇文章主要為大家詳細介紹了IOS如何替換電話號碼中間4位為-符號的方法,感興趣的小伙伴們可以參考一下
    2016-07-07
  • Objective-C 宏定義詳細介紹

    Objective-C 宏定義詳細介紹

    這篇文章主要介紹了Objective-C 宏定義詳細介紹的相關(guān)資料,這樣開發(fā)起來,更有效率,更好,更簡潔,需要的朋友可以參考下
    2016-10-10

最新評論

醴陵市| 中江县| 大名县| 濮阳县| 康平县| 徐闻县| 嘉善县| 毕节市| 双桥区| 宁波市| 根河市| 冕宁县| 濮阳县| 宣恩县| 文化| 柳江县| 文山县| 平原县| 五原县| 马关县| 祥云县| 会泽县| 兴山县| 大渡口区| 福安市| 太保市| 隆安县| 肥城市| 固阳县| 内乡县| 行唐县| 如东县| 盱眙县| 梧州市| 彝良县| 青海省| 酒泉市| 临沂市| 温州市| 淮阳县| 神木县|