据我所知,我确信超级脚本可以很容易地完成使用带属性字符串但我只想用字符串做这个
是否有转义字符串或其他方法?这样我就可以让任何字符,数字或符号成为上标
请建议
做到这一点的唯一方法是使用带有属性的文本字符串,在上标文本的范围内应用较小的字体和基线偏移量。
如果您希望能够输入带有转义上标的纯文本,则需要编写一个字符串扩展来检测是否存在"escaping"字符,最明显的是^
,并为您生成格式。对这种方法的警告是,你要么需要知道哪些特定的字符串需要它,要么你必须将它应用于所有字符串,这意味着你不能使用&;转义&;正常文本中的字符
有许多示例扩展很容易找到与快速谷歌,或编写自己的。
如果你想要做的是在上标(或下标)中有一组unicode字符,你可以直接放入你的文本中。它看起来不会很漂亮,但可能足够了。
编辑:在下面添加示例字符串扩展。
下面的命令将接受一个纯文本字符串,并返回一个带有上标的带属性字符串,将任何被分隔符包围的文本作为上标。它是基本的,没有注意到任何边缘情况(例如。使用双分隔符(允许在文本中使用分隔符),但给出了一个可以构建的示例。
extension String {
func superscripted(delimitedBy marker: Character) -> NSAttributedString {
let superOffset = 10.0
let superFont = UIFont.systemFont(ofSize: 6)
let superAttribs: [NSAttributedString.Key : Any] = [.baselineOffset: superOffset, .font: superFont]
let attribString = NSMutableAttributedString(string: "")
var superString = ""
for char in self {
switch (char, superString.isEmpty){
case (marker, true): superString.append(char)
case (marker, false):
attribString.append(NSAttributedString(string: superString, attributes: superAttribs))
superString = ""
case (_, true): attribString.append(NSAttributedString(string: String(char)))
case (_, false): superString.append(char)
}
}
return attribString
}
}
可以使用
"sdsdfsf^123123^svsvsv^3343^".superscripted(delimitedBy: "^")
将数字部分作为上标。