我目前正试图在UITextView
上以日语显示一些文字。 是否有可能以类似于<的方式显示汉字上方的假名(如下所示)。室温> html中的标签,不使用网页视图?
涉及大量文本处理,因此我不能简单地使用Web视图。在iOS8中,添加了CTRubyAnnotationRef
但没有文档(我会欢迎任何示例),而且我也担心与iOS7缺乏兼容性。我认为可以使用NSAttributedString
显示上面的假名,但到目前为止还没有。
答案 0 :(得分:1)
最后,我创建了一个能够获得汉字位置的函数,并且每次都会在汉字上方创建标签。它非常脏,但它是确保与iOS7兼容的唯一方法。
但是我必须提到你现在可以在GitHub上为CTRubyAnnotationRef找到的非凡的例子:http://dev.classmethod.jp/references/ios8-ctrubyannotationref/ 和 https://github.com/shinjukunian/SimpleFurigana
祝大家好运!
答案 1 :(得分:0)
我找到了一个很好的解决方案
Swift 4.2
此解决方案是对预览答案的更新,可以让您编写日语句子,并使用一种模式可以显示带有假名的句子。
在此解决方案中,您使用3个String扩展名
func find(pattern: String) -> NSTextCheckingResult? {
do {
let findRubyText = try NSRegularExpression(pattern: pattern, options: [])
return findRubyText.firstMatch(
in: self,
options: [],
range: NSMakeRange(0, self.utf16.count))
} catch {
return nil
}
}
func replace(pattern: String, template: String) -> String {
do {
let replaceRubyText = try NSRegularExpression(pattern: pattern, options: [])
return replaceRubyText.stringByReplacingMatches(
in: self,
options: [],
range: NSMakeRange(0, self.utf16.count),
withTemplate: template)
} catch {
return self
}
}
func rubyAttributedString(font: UIFont, textColor: UIColor) -> NSMutableAttributedString {
let attributed =
self.replace(pattern: "(|.+?《.+?》)", template: ",$1,")
.components(separatedBy: ",")
.map { x -> NSAttributedString in
if let pair = x.find(pattern: "|(.+?)《(.+?)》") {
let baseText = (x as NSString).substring(with: pair.range(at: 1))
let ruby = (x as NSString).substring(with: pair.range(at: 2))
let rubyAttribute: [AnyHashable: Any] = [
kCTRubyAnnotationSizeFactorAttributeName: 0.5,
kCTForegroundColorAttributeName: textColor
]
let annotation = CTRubyAnnotationCreateWithAttributes(.auto, .auto, .before, ruby as CFString, rubyAttribute as CFDictionary)
return NSAttributedString(
string: baseText,
attributes: [.font: font,
.foregroundColor: textColor,
kCTRubyAnnotationAttributeName as NSAttributedString.Key: annotation])
} else {
return NSAttributedString(
string: x,
attributes: [.font: font,
.foregroundColor: textColor]
)
}
}
.reduce(NSMutableAttributedString()) { $0.append($1); return $0 }
return attributed
}
此扩展允许您创建一个NSAttributed字符串以提供给标签
Great solution written in Japanese but it possible to download the example project