【发布时间】:2013-10-06 04:50:21
【问题描述】:
如何在 iOS 7 中支持 UILabel 和 UITextView 中的动态类型?我正在为 iOS 7 调整我们的一个项目,并希望支持此辅助功能。我在 Apple 的 iOS 开发者网站上找不到具体的教程。
【问题讨论】:
标签: dynamic types uilabel uitextview ios7
如何在 iOS 7 中支持 UILabel 和 UITextView 中的动态类型?我正在为 iOS 7 调整我们的一个项目,并希望支持此辅助功能。我在 Apple 的 iOS 开发者网站上找不到具体的教程。
【问题讨论】:
标签: dynamic types uilabel uitextview ios7
如果您使用新的 UIFont 方法,那么您就差不多了 - 您只需要添加观察者来监听变化。
在设置标签样式时,您应该使用preferredFontForTextStyle: 和相关方法而不是设置特定的字体大小(如果您使用的是Interface Builder,则可以直接在检查器中选择样式)。例如:
self.label.font = [UIFont preferredFontForTextStyle:UIFontTextStyleHeadline];
完成后,您应该收听UIContentSizeCategoryDidChangeNotification。当您收到此通知时,您应该对标签进行布局以支持新选择的大小(如果您使用自动布局,这通常就像向您的视图发送 invalidateIntrinsicContentSize 一样简单)。
如果您正在寻找官方文档,请查看Text Programming Guide。
【讨论】:
preferredFontForTextStyle 虽然返回系统字体,有没有办法用自定义字体做到这一点?
UIFontMetrics 类可以根据当前字体指标缩放任何自定义字体:UIFontMetrics documentation
在 Swift 3 和 iOS 10 中你可以使用
headline.font = UIFont.preferredFont(forTextStyle: UIFontTextStyleHeadline)
headline.adjustsFontForContentSizeCategory = true
请参阅this excellent post 了解更多信息,尤其是如何支持 iOS 10 之前的版本。
【讨论】: