获取属性标签上的动态类型

时间:2017-11-24 10:42:03

标签: ios objective-c uilabel accessibility nsattributedstring

目前我正在开展一个项目,我需要让整个应用程序使用动态类型,这意味着应用程序中的所有文本都可以通过手机设置应用程序调整大小。

所有标签都在调用的属性检查器中打勾 “动态类型 - 自动调整字体”,勾选标签时可以动态调整大小。

请记住,我的应用程序是在iOS 10中,并且所有字体必须是默认的系统字体,因此我可以应用文本样式(标题1,正文,标注等),然后允许动态调整文本大小。

现在的问题是我有带有属性文本的标签。在我的情况下,我有一个包含2种不同颜色的标签,第二种颜色的文字带有下划线。没有选项可以使用属性标签获取动态类型,因此无法调整大小。

我的临时解决方案是创建2个不同的标签,每个标签都有自己的颜色。但第二个问题需要强调。我不知道如何实现这一目标。我尝试在它下面添加一行(UIView是一个像素高),但该行不会调整动态文本大小,这意味着当我调整文本大小时,行保持不变。

example image

上面你可以看到我的临时解决方案。文本大小确实用2个不同的标签调整,但下划线保持不变(UIView是一个像素高)。

有关如何实现这一目标的任何建议? 非常感激。

1 个答案:

答案 0 :(得分:0)

将您的“联系人” “我们” 单词作为一个NSMutableAttributedString来添加underlineStyle属性,如下所示:

    @IBOutlet weak var myLabel: UILabel!

    override func viewDidLoad() {
        super.viewDidLoad()

        let myString = "Contact Us"

        let myText = NSMutableAttributedString(string:myString,
                                               attributes: [
                                                .font: UIFontMetrics(forTextStyle: .title1).scaledFont(for: UIFont(name:"HoeflerText-Black", size:18)!,
                                                .underlineStyle:NSUnderlineStyle.single.rawValue)
                    ])

        myLabel.attributedText = myText
    }

在此代码段中使用Dynamic Type可提供您想要的结果。 enter image description here