概述
iOS里要使用某種字體,這個對開發(fā)都應(yīng)該是一個最基礎(chǔ)的事情
Label.font = UIFont.systemFont(ofSize: 12)
如此這般懈息,簡單又快遂唧,但是如果說要實(shí)現(xiàn)一個字體大小動態(tài)變化的效果呢,估計(jì)很多同學(xué)沒有做過這個事情霞扬。今天簡單說一下佑笋。
概念
生成動態(tài)大小字體
UIFont有一個類方法:
open class func preferredFont(forTextStyle style: UIFont.TextStyle) -> UIFont
這個方法返回與文本樣式關(guān)聯(lián)的字體實(shí)例翼闹,并根據(jù)用戶選定的內(nèi)容大小類別進(jìn)行適當(dāng)縮放。
也就是意味著允青,當(dāng)用戶在這個界面
更改了字體大小的時候,這個方法返回的字體大小是不一樣的。
采用如下的方式設(shè)置字體的話
label.font = UIFont.preferredFont(forTextStyle: .headline)
我們可能會發(fā)現(xiàn)字體調(diào)整并沒有改變頁面上的字體大小颠锉。原因是我們?nèi)鄙倭艘徊健?/p>
使Label應(yīng)用動態(tài)字體
Label有一個屬性:
var adjustsFontForContentSizeCategory: Bool { get set }
指示當(dāng)設(shè)備的UIContentSizeCategory更改時法牲,對應(yīng)元素是否應(yīng)自動更新其字體。
要使此屬性生效琼掠,元素的字體必須是以下字體之一:
- 使用+preferredFontForTextStyle:或+preferredFontForTextStyle:(參數(shù)是一個有效的UIFontTextStyle)compatibleWithTraitCollection: 函數(shù)生成的字體
- 使用-[UIFontMetrics scaledFontForFont:]或其變體之一合法的字體
所以我們要想讓Label采用動態(tài)大小字體還需要
label.adjustsFontForContentSizeCategory = true
自定義字體動態(tài)大小實(shí)踐
系統(tǒng)定義好的字體可以實(shí)現(xiàn)動態(tài)大小拒垃,自然就有自定義字體怎么實(shí)現(xiàn)動態(tài)大小的疑問了,
要實(shí)現(xiàn)這個瓷蛙,我們先看看UIFontMetrics這個類:
應(yīng)用程序中的可縮放自定義字體通過使用UIFontMetrics對象實(shí)現(xiàn)悼瓮。我們創(chuàng)建一個字體度量對象,該對象指定要在應(yīng)用程序中使用的字體樣式艰猬,例如横堡,正文或標(biāo)題。然后將自定義字體傳遞給scaledFont(for:)方法(或此類的其他方法之一)冠桃,以獲取基于自定義字體的字體對象命贴,該對象具有適當(dāng)?shù)臉邮叫畔ⅲ⒆詣涌s放以匹配當(dāng)前的動態(tài)類型設(shè)置食听。例如
let palatino = UIFont(name: "Palatino", size: 18)
label.font = UIFontMetrics(forTextStyle: .body).scaledFont(for: palatino)
同樣,得到動態(tài)大小的字體之后我們需要讓Label采用這個動態(tài)大小字體
label.adjustsFontForContentSizeCategory = true
這樣就解決了自定義字體動態(tài)大小的問題
總結(jié)
有些基本的功能說起來簡單胸蛛,但是需求稍微一變,可能就需要我們再多儲備一些知識才能解決了樱报。