我有一个字符串,我希望它下面有下标字母,例如
我无法在swift中找到一个清楚显示/解释如何执行此操作的示例。
答案 0 :(得分:1)
在Swift中,String可以包含任何unicode字符。转到编辑 - >表情符号& Xcode中的符号将下标插入X 2中。
答案 1 :(得分:0)
您可以使用NSAttributedString
并为字符串的该部分设置不同的font
和baselineOffset
来实现此目的。
基线偏移将上下移动该部分字符串。
答案 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")
makeSubscript(baseString: "x", subscriptString: "20", attributes: [.font: UIFont.systemFont(ofSize: 100), .foregroundColor: UIColor.blue])
您可以将结果分配给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"]