如何在iOS 7中支持标签的动态类型?

33

我如何在iOS 7中支持UILabelUITextView的动态类型?我正在为我们的一个项目适应iOS 7,并希望支持这个无障碍功能。我找不到关于它的具体教程在苹果的iOS开发者网站上。


2个回答

57
如果您使用新的UIFont方法,那么您就已经完成了 - 您只需要添加观察者来监听更改。与设置特定字体大小不同,当样式化标签时,您应该使用preferredFontForTextStyle:和相关方法(如果您使用Interface Builder,则可以直接在检查器中选择样式)。例如:self.label.font = [UIFont preferredFontForTextStyle:UIFontTextStyleHeadline];。完成后,您应该监听UIContentSizeCategoryDidChangeNotification通知。当您接收到此通知时,您应该布局标签以支持新选定的大小(如果您使用autolayout,则通常只需向视图发送invalidateIntrinsicContentSize即可)。如果您正在寻找官方文档,请查看文本编程指南

有没有一种方法可以访问在Interface Builder中选择的样式?如果没有,那似乎是一个很大的疏忽。现在我必须在两个地方设置它,这意味着它不可避免地会失去同步。 - MacsimusPrime
preferredFontForTextStyle 返回系统字体,但是有没有办法使用自定义字体来实现这个功能呢? - kevin
@kevin:UIFontMetrics类可以根据当前的字体度量标准来缩放任何自定义字体:UIFontMetrics文档 - Vadim Belyaev

2
在Swift 3和iOS 10中,您可以使用以下内容:
headline.font = UIFont.preferredFont(forTextStyle: UIFontTextStyleHeadline)
headline.adjustsFontForContentSizeCategory = true

请参见此优秀文章,了解更多信息,特别是如何支持iOS 10之前的版本。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接