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

Posted

技术标签:

【中文标题】在属性标签上获取动态类型【英文标题】:Getting dynamic type on attributed label 【发布时间】:2017-11-24 10:42:03 【问题描述】:

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

所有标签在属性检查器中都有一个勾号,称为 “动态类型 - 自动调整字体”,勾选后标签可以动态调整大小。

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

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

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

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

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

【问题讨论】:

【参考方案1】:

把你的“Contact”“Us”字作为一个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 与此sn-p 一起使用可提供您希望的结果;

【讨论】:

以上是关于在属性标签上获取动态类型的主要内容,如果未能解决你的问题,请参考以下文章

如何在xml文件中申明dynamic元素类型

在 C# 4 中使用动态类型访问 javascript 对象的属性

在动态sql的使用where时,if标签判断中,如果实体类中的某一个属性是String类型,那么就可以这样来判断连接语句:

SwiftUI Core Data - NSPredicate 动态过滤字符串数组属性包含给定字符串的位置

如何检查 C# 中的动态匿名类型上是不是存在属性?

删除由动态变化的字符串前置的脚本类型属性