我在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()
  
   谢谢