動(dòng)態(tài)字體是iOS7才被引入到iPhone上的关带,我們可以在手機(jī)的設(shè)置-通用-字體大小里面設(shè)置手機(jī)顯示的字體大小,設(shè)置后我們可以發(fā)現(xiàn)很多系統(tǒng)自帶的app界面字體或者布局都有所改變卖陵,如果我們的app也想要提供這樣一個(gè)動(dòng)態(tài)字體的體驗(yàn),那就可以用iOS7引入的DynamicType來實(shí)現(xiàn)张峰。
DynamicType是屬于Text Kit下面的一個(gè)特性
Text Kit是建立在Core Text框架上的
CoreText.framework是一個(gè)龐大而復(fù)雜的框架泪蔫,而Text Kit在繼承了Core Text強(qiáng)大功能的同時(shí)給開發(fā)者提供了比較友好的面向?qū)ο蟮腁PI。
實(shí)現(xiàn)過程:
1.注冊一個(gè)DynamicType的消息通知: __ UIContentSizeCategoryDidChangeNotification__
2.在系統(tǒng)字體大小改變的通知后來更新界面上需要支持DynamicType的UIKit的font
self.textLabel.font = [UIFont preferredFontForTextStyle:UIFontTextStyleBody];
//這里調(diào)用setNeedsLayout做一個(gè)需要重新布局的標(biāo)記,在下一個(gè)draw周期(60Hz)自動(dòng)重繪
[self.view setNeedsLayout];
3.最后在layoutSubview或者viewDidLayoutSubview里面更新textLabel的frame
在iOS 10之后,只需要兩行代碼便可實(shí)現(xiàn):
- (void)viewDidLoad {
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
// 1. 設(shè)置字體大小
self.demoLabel.font = [UIFont preferredFontForTextStyle:UIFontTextStyleBody];
// 2. 允許調(diào)整
self.demoLabel.adjustsFontForContentSizeCategory = YES;
}