gpt4 book ai didi

swift - 如何阻止 NSTextView 显示指定字体不支持的字符

转载 作者:行者123 更新时间:2023-11-30 11:45:31 25 4
gpt4 key购买 nike

我正在寻找一种方法,当显示字符串中的某些字符在指定字体中不可用时,阻止 NSTextView 回退到级联字体。

我正在编写一个应用程序,其中用户知道某些字符(例如东亚字符集中的字符)在给定字体中是否可用非常重要。如果这些字符不可用,我希望字段将它们显示为框、空格或类似的内容。但是,默认情况下, TextView 会使用支持字符的级联字体。有什么办法可以改变这种行为吗?

如果这是不可能的,是否有某种方法可以检测给定字体支持哪些语言?

任何帮助将不胜感激。

最佳答案

我能够通过部分基于this answer创建扩展来使其工作。 .

我最终使用的解决方案是迭代相关字符串中的每个字符,并检查它是否包含在字体的字符集中。如果不是,则在将其添加到包含原始字符串的所有字符的属性字符串之前,会更改外观(在本例中,更改颜色并添加删除线)。

这就是它最终的样子:

extension UnicodeScalar {
func isIn(font:NSFont)-> Bool {
let coreFont:CTFont = font
let charSet:CharacterSet = CTFontCopyCharacterSet(coreFont) as CharacterSet
if charSet.contains(self) {
return true
}
return false
}
}

extension NSFont {
func supportString(_ str:String)-> NSAttributedString {
let attString = NSMutableAttributedString(string: "")
for scalar in str.unicodeScalars {
if !scalar.isIn(font: self) {
let r:CGFloat = 200
let g:CGFloat = 0
let b:CGFloat = 0
let a:CGFloat = 0.2
let color = NSColor(red: r, green: g, blue: b, alpha: a)
let attcha = NSMutableAttributedString(string: String(scalar), attributes: [NSAttributedStringKey.foregroundColor:color, NSAttributedStringKey.strikethroughStyle:NSUnderlineStyle.styleSingle.rawValue])
attString.append(attcha)
} else {
let attcha = NSAttributedString(string: String(scalar), attributes: [NSAttributedStringKey.foregroundColor:NSColor.black])
attString.append(attcha)
}
}
return attString
}
}

关于swift - 如何阻止 NSTextView 显示指定字体不支持的字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48871248/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com