如何在swift中创建一个包含下标字母的字符串

时间:2018-03-27 00:24:59

标签: ios swift

我有一个字符串,我希望它下面有下标字母,例如

image

我无法在swift中找到一个清楚显示/解释如何执行此操作的示例。

3 个答案:

答案 0 :(得分:1)

在Swift中,String可以包含任何unicode字符。转到编辑 - >表情符号& Xcode中的符号将下标插入X 2中。

答案 1 :(得分:0)

您可以使用NSAttributedString并为字符串的该部分设置不同的fontbaselineOffset来实现此目的。

基线偏移将上下移动该部分字符串。

答案 2 :(得分:0)

使用NSAttributedString及其可变子类NSMutableAttributedString

func makeSubscript(baseString: String, subscriptString: String, attributes: [NSAttributedStringKey: Any] = [:]) -> NSAttributedString {
    // Merge the default attributes with those provided by the user
    let attributes: [NSAttributedStringKey: Any] = [
        .font: UIFont.systemFont(ofSize: 14)
    ].merging(attributes) { $1 }

    // Configure the attributes for subscript
    let font = attributes[.font] as! UIFont
    let baselineOffset = NSNumber(value: -Double(font.pointSize) * 0.15)
    let subscriptAttributes: [NSAttributedStringKey: Any] = [
        .font: font.withSize(font.pointSize * 0.5),
        .baselineOffset: baselineOffset
    ].merging(attributes) { $0 }

    let attributedString = NSMutableAttributedString(string: baseString, attributes: attributes)
    attributedString.append(NSAttributedString(string: subscriptString, attributes: subscriptAttributes))

    return attributedString
}

结果:

makeSubscript(baseString: "x", subscriptString: "2")

x_2

makeSubscript(baseString: "x", subscriptString: "20", attributes: [.font: UIFont.systemFont(ofSize: 100), .foregroundColor: UIColor.blue])

x_20

您可以将结果分配给label.attributedText属性。

Dictionary.merge()功能需要在此处进行一些解释。我们假设你有两本词典:

let dictA = ["firstName": "John", "lastName": "Smith"]
let dictB = ["lastName": "Willy", "nickname": "Jack"]

merge结合了两个词典,并确定如果两个词典中都存在键,哪个值优先:

let dictC = dictA.merging(dictB) { valueInA, valueInB in valueInA }
// ["firstName": "John", "lastName": "Smith", "nickname": "Jack"]

let dictD = dictA.merging(dictB) { valueInA, valueInB in valueInB }
// ["firstName": "John", "lastName": "Willy", "nickname": "Jack"]