问题描述
我正在尝试添加 ruby 文本注释,以便我可以在日语应用程序中的汉字词上方显示假名。我相信 CTRubyAnnotationCreateWithAttributes 是用于创建 ruby 文本的函数,但是当我运行这个简单的应用程序时,它只显示主要文本。有人可以指出我缺少什么吗?谢谢。
import UIKit
class ViewController: UIViewController {
@IBOutlet var textView: UITextView!
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view.
let word = "食べ物"
let ruby = "たべもの"
var text = furigana(main: word,furigana: ruby)
textView.attributedText = text
}
func furigana(main: String,furigana: String) -> NSMutableAttributedString {
var ruby = furigana
var unmanage = Unmanaged.passRetained(ruby as CFString)
defer { unmanage.release() }
var text: [Unmanaged<CFString>?] = [unmanage,.none,.none]
let rubyAttribute: [AnyHashable: Any] = [
kCTRubyAnnotationSizefactorAttributeName: 0.5,kCTForegroundColorAttributeName: UIColor.black
]
let annotation = CTRubyAnnotationCreateWithAttributes(.auto,.auto,.before,ruby as CFString,rubyAttribute as CFDictionary)
//let annotation = CTRubyAnnotationCreate(.center,0.5,&text)
let attributed = NSMutableAttributedString(
string: main,attributes: [kCTRubyAnnotationAttributeName as NSAttributedString.Key: annotation])
let paragraphStyle = NSMutableParagraphStyle()
paragraphStyle.lineHeightMultiple = 1.0
paragraphStyle.linespacing = 12
attributed.addAttribute(NSAttributedString.Key.paragraphStyle,value: paragraphStyle,range: NSMakeRange(0,attributed.length))
attributed.addAttributes([NSAttributedString.Key.font: UIFont(name: "HiraMinProN-W3",size: 14.0)!,NSAttributedString.Key.verticalGlyphForm: false,],(attributed.length)))
return attributed
}
}
解决方法
我能够通过两项更改使其正常工作:
- 使用
UILabel
而不是UITextView
。 - 删除
verticalGlyphForm
属性。
我没有看到任何明显的文档,但似乎 UITextView
可能不支持 ruby 文本。至于verticalGlyphForm
,the documentation says it's not supported on iOS and if specified the behavior is undefined。