BNRDynamicTypeManager 是一组辅助类,它使 iOS 7 应用程序中的 Dynamic Type 更易于使用。最重要的是,它处理监听 UIContentSizeCategoryDidChangeNotification
并自动更新所有“监视”控件的字体。
要运行示例项目,克隆仓库,确保选择 Example 目标,然后运行它。
要运行单元测试,首先从 Tests 目录运行 pod install
命令。
最简单的用例是如果您正在使用 XIB 文件或 Storyboard。将 BNRDynamicTypeManager 拖入项目后,将以下类的任何实例更改为 BNRDynamicTypeManager 提供的适当子类(并确保选择了系统文本样式作为视图的字体)
UILabel
→ BNRDynamicTypeManagedLabel
UIButton
→ BNRDynamicTypeManagedButton
UITextField
→ BNRDynamicTypeManagedTextField
UIView
→ BNRDynamicTypeManagedView
如果您是编程创建视图,请使用上面使用 XIB 文件中的相同类映射,并使用它们头文件中的指定初始化器。初始化器具有与 UIKit 父类相同的参数,并有一个额外的 textStyle:
参数。例如,创建一个管理的 UILabel 和 UITextView
UILabel *label = [[BNRDynamicTypeManagedLabel alloc]
initWithFrame:CGRectZero
textStyle:UIFontTextStyleBody];
UITextView *textView = [[BNRDynamicTypeManagedTextView alloc]
initWithFrame:CGRectZero
textContainer:nil
textStyle:UIFontTextStyleFootnote];
如果您想要更明确地控制(例如,如果您已经有一个正在使用的 UIKit 子类,但您仍然希望字体由您管理),则通过告诉它要监视哪些对象来直接使用 BNRDynamicTypeManager
。如果该对象是已知的UIKit类之一或它们的子类,请使用提供的方法。例如,对于 UILabel
UILabel *label = /* create a label */;
// Tell BNRDynamicTypeManager to update label.font now and any time the user
// changes their font size.
[[BNRDynamicTypeManager sharedInstance] watchLabel:label
textStyle:UIFontTextStyleBody];
如果您想监视的对象不是已知的 UIKit
类之一,但有一个通过键路径可以访问的 UIFont *font
,请使用 watchElement:fontKeypath:textStyle:
代替。例如,如果没有提供 UIButton
的方法
UIButton *button = /* create a button */;
[[BNRDynamicTypeManager sharedInstance] watchElement:button
fontKeypath:@"titleLabel.font"
textStyle:UIFontTextStyleBody];
iOS 7 和 ARC。
John Gallagher, [email protected]
BNRDynamicTypeManager 在 MIT 许可下可用。有关更多信息,请参阅 LICENSE 文件。