【问题标题】:How to support dynamic type in labels in iOS 7?如何在 iOS 7 中支持动态类型的标签?
【发布时间】:2013-10-06 04:50:21
【问题描述】:

如何在 iOS 7 中支持 UILabel 和 UITextView 中的动态类型?我正在为 iOS 7 调整我们的一个项目,并希望支持此辅助功能。我在 Apple 的 iOS 开发者网站上找不到具体的教程。

【问题讨论】:

标签: dynamic types uilabel uitextview ios7


【解决方案1】:

如果您使用新的 UIFont 方法,那么您就差不多了 - 您只需要添加观察者来监听变化。

在设置标签样式时,您应该使用preferredFontForTextStyle: 和相关方法而不是设置特定的字体大小(如果您使用的是Interface Builder,则可以直接在检查器中选择样式)。例如:

self.label.font = [UIFont preferredFontForTextStyle:UIFontTextStyleHeadline];

完成后,您应该收听UIContentSizeCategoryDidChangeNotification。当您收到此通知时,您应该对标签进行布局以支持新选择的大小(如果您使用自动布局,这通常就像向您的视图发送 invalidateIntrinsicContentSize 一样简单)。

如果您正在寻找官方文档,请查看Text Programming Guide。

【讨论】:

  • 有没有办法访问在 Interface Builder 中选择的样式?如果没有,那似乎是一个很大的疏忽。现在我必须在 2 个地方设置它,这意味着它不可避免地会不同步。
  • preferredFontForTextStyle 虽然返回系统字体,有没有办法用自定义字体做到这一点?
  • @kevin: UIFontMetrics 类可以根据当前字体指标缩放任何自定义字体:UIFontMetrics documentation
【解决方案2】:

在 Swift 3 和 iOS 10 中你可以使用

headline.font = UIFont.preferredFont(forTextStyle: UIFontTextStyleHeadline)
headline.adjustsFontForContentSizeCategory = true

请参阅this excellent post 了解更多信息,尤其是如何支持 iOS 10 之前的版本。

【讨论】:

    猜你喜欢
    • 2013-11-04
    • 1970-01-01
    • 2015-03-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多