ios - iOS如何使用转义序列在字符串中实现上标(\n,\t,\r)
问题描述
据我所见,我确信超级脚本可以使用属性字符串轻松完成,但我只想用字符串来完成
是否有任何转义字符串或其他方式来做到这一点?这样我就可以将任何字符或数字或符号设为上标
好心提醒
解决方案
做到这一点的唯一方法是使用属性文本字符串,将较小的字体和基线偏移应用于上标文本的范围。
如果您希望能够输入带有上标转义的纯文本,则需要编写一个字符串扩展名来检测“转义”字符的存在,显然是^
,并为您生成格式。这种方法需要注意的是,您要么需要知道哪些特定字符串需要它,要么必须将其应用于所有字符串,这意味着您不能在普通文本中使用“转义”字符。
可以通过快速 google 轻松找到许多示例扩展,或者编写自己的扩展。
如果您只想在上标(或下标)中使用数字,则可以使用一组 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: "^")
将数字部分作为上标。
推荐阅读
- javascript - 简单的演示项目 Webpack KO(with a components) javascript
- logstash - Grok 问题 - 处理“SOME-TEXT”模式
- wordpress - WordPress 语言取决于地理区域
- html - 如何动态更改Angular模板中的属性名称?
- java - 休眠验证器不适用于 Spring MVC 应用程序
- java - Infinispan 驱逐与树缓存
- memory-management - 紧凑的 trie 有什么好处?
- python - 如何将数组中的各个条目放入具有自己变量的数组中?
- c# - 访问仍在移动的文件导致的 IOException
- angular - 角度缓冲区事件,然后在不活动延迟后执行某些操作