我在UILabel上使用一个紧排属性来显示带有一些自定义字母间距的文本。不幸的是,在显示用户生成的字符串时,有时会看到如下情况:
即有时某些表情符号不显示
如果我注释掉字距,但应用一些段落样式,则会得到同样的错误呈现
我在文档中找不到任何明确拒绝支持特殊unicode字符的内容。我是做错了什么还是iOS错误
复制错误的代码可在此处作为游乐场使用:
https://github.com/Bootstragram/Playgrounds/tree/master/LabelWithEmoji.playground
并抄录于此:
用于显示用户界面的基于UIKit的游乐场
导入UIKit
导入PlaygroundSupport
扩展NSAttribute字符串{
静态func kernedSpacedText(\uText:String,
字母间距:CGFloat=0.0,
线宽:CGFloat?=无)—>NSAttribute字符串{
//TODO添加字体属性
让attributedString=NSMutableAttributedString(字符串:文本)
attributedString。addAttribute(NSAttributedStringKey.kern,
值:字母间距,
范围:NSRange(位置:0,长度:text.count))
如果let lineHeight=lineHeight{
让paragraphStyle=NSMutableParagraphStyle()
段落样式。行距=线宽
attributedString。addAttribute(NSAttributedStringKey.paragraphStyle,
值:段落样式,
范围:NSRange(位置:0,长度:text.count))
}
返回AttributeString
}
}
//对于UIFont中的familyName。familyNames家族{
//用于UIFont中的fontName。fontNames(用于familyName:familyName){
//打印(fontName)
//}
//}
类MyViewController:UIViewController{
重写func loadView(){
let view=UIView()
看法背景颜色=。白色
让我来告诉你
let label=UILabel()
标签框架=CGRect(x:150,y:200,宽度:200,高度:100)
标签AttributeText=NSAttribute字符串。kernedSpacedText(myString)
标签numberOfLines=0
标签text颜色=。黑色
看法添加子视图(标签)
自己视图=视图
}
}
//在实时视图窗口中显示视图控制器
PlaygroundPage。现在的liveView=MyViewController()
谢谢
即有时某些表情符号不显示。
如果我注释掉字距,但应用一些段落样式,则会得到同样的错误呈现。
我在文档中找不到任何明确拒绝支持特殊unicode字符的内容。我是做错了什么还是iOS错误?
复制错误的代码可在此处作为游乐场使用:
https://github.com/Bootstragram/Playgrounds/tree/master/LabelWithEmoji.playground
并复制到此处:
//: A UIKit based Playground for presenting user interface
import UIKit
import PlaygroundSupport
extension NSAttributedString {
static func kernedSpacedText(_ text: String,
letterSpacing: CGFloat = 0.0,
lineHeight: CGFloat? = nil) -> NSAttributedString {
// TODO add the font attribute
let attributedString = NSMutableAttributedString(string: text)
attributedString.addAttribute(NSAttributedStringKey.kern,
value: letterSpacing,
range: NSRange(location: 0, length: text.count))
if let lineHeight = lineHeight {
let paragraphStyle = NSMutableParagraphStyle()
paragraphStyle.lineSpacing = lineHeight
attributedString.addAttribute(NSAttributedStringKey.paragraphStyle,
value: paragraphStyle,
range: NSRange(location: 0, length: text.count))
}
return attributedString
}
}
//for familyName in UIFont.familyNames {
// for fontName in UIFont.fontNames(forFamilyName: familyName) {
// print(fontName)
// }
//}
class MyViewController : UIViewController {
override func loadView() {
let view = UIView()
view.backgroundColor = .white
let myString = "1â½ðºð»â¾ï¸ð¯ðââï¸ð\n2 ðð¿ð¸ ð»"
let label = UILabel()
label.frame = CGRect(x: 150, y: 200, width: 200, height: 100)
label.attributedText = NSAttributedString.kernedSpacedText(myString)
label.numberOfLines = 0
label.textColor = .black
view.addSubview(label)
self.view = view
}
}
// Present the view controller in the Live View window
PlaygroundPage.current.liveView = MyViewController()
谢谢