如何找到 UILabel 的现有 UIFontTextStyle?

How do I find the existing UIFontTextStyle of a UILabel?

我目前正在 UILabel 上创建扩展以方便观察动态类型。收到 UIContentSizeCategoryDidChangeNotification 后,我希望我的选择器使用

设置标签的字体
self.font = UIFont.preferredFontForTextStyle(someUIFontTextStyle)

其中 someUIFontTextStyle 使用与当前展示的标签相同的 UIFontTextStyle。我曾希望这样的 属性 可以通过类似 self.font.fontDescriptor.textStyle 的方式访问,但事实似乎更令人费解。

有没有办法访问与 UILabel 关联的 UIFontTextStyle 属性?

解决方案

self.font.fontDescriptor().objectForKey(UIFontDescriptorTextStyleAttribute) as? String

正如您所发现的 ,您可以从字体描述符中获取字体的文本样式:

self.font.fontDescriptor().objectForKey(UIFontDescriptorTextStyleAttribute) as? String

已接受的答案对于 swift 3. UIContentSizeCategoryDidChangeNotification 的处理程序需要执行以下操作:

if let font = myUILable.font.fontDescriptor.object(forKey: UIFontDescriptorTextStyleAttribute) as? UIFontTextStyle {
    myUILabel.font = UIFont.preferredFont(forTextStyle: font)
}