1

私が取り組んでいるアプリケーションは、XCode 8.3 ベータ 2 を介して iOS 10.3 シミュレーターでテストしたときに問題が発生しました。ここで、AttributedString の上付き文字が通常のテキストと同じ行に表示されます。iOS 10.2.x 以下では、正しく表示されています。

iOS 10.3 スクリーンショット: https://www.dropbox.com/s/p5v71g722cg5qhy/Screen%20Shot%202017-02-21%20at%2010.24.21%20AM.png?dl=0

iOS 10.2.x 以下のスクリーンショット: https://www.dropbox.com/s/lcfsic6xyz953qp/Scr ​​een%20Shot%202017-02-21%20at%2010.19.17%20AM.png?dl=0

テキストの処理方法は次のとおりです。

  • 最初は、文字列は HTML 形式で、上記のテキスト「8,9」のタグ

<html>  
<head>  
     <style> body { color: #554344 ; font-family: \'MyCustomFont\'; font-size: 18px; } sup { font-size: 13px; } </style>  
</head>  
<body>  
     ABCdef<sup>1,2,3,8,9</sup>  
</body>  
</html>  

  • 次に、次のスクリプトを使用して NSAttributedString に変換された html 文字列

private func convertHTMLToAttributedString(string: String) -> NSAttributedString {  
       guard let data = string.data(using: String.Encoding.utf16, allowLossyConversion: false) else { return NSAttributedString() }  
       return try! NSAttributedString(  
           data: data,  
           options: [ NSDocumentTypeDocumentAttribute: NSHTMLTextDocumentType],  
           documentAttributes: nil)  
   } 

  • NSAttributedString は、UILabel.attributedText を介してレンダリングされます。これは attributedText の説明です。

1,2,3,8,9{  
   NSColor = "kCGColorSpaceModelRGB 0.333333 0.262745 0.266667 1 ";  
   NSFont = "<UICTFont: 0x7fed0a469880> font-family: \"MyCustomFont\"; font-weight: normal; font-style: normal; font-size: 10.00pt";  
   NSKern = 0;  
   NSParagraphStyle = "Alignment 4, LineSpacing 0, ParagraphSpacing 0, ParagraphSpacingBefore 0, HeadIndent 0, TailIndent 0, FirstLineHeadIndent 0, LineHeight 13/0, LineHeightMultiple 0, LineBreakMode 0, Tabs (\n), DefaultTabInterval 36, Blocks (\n), Lists (\n), BaseWritingDirection 0, HyphenationFactor 0, TighteningForTruncation NO, HeaderLevel 0";  
   NSStrokeColor = "kCGColorSpaceModelRGB 0.333333 0.262745 0.266667 1 ";  
   NSStrokeWidth = 0;  
   NSSuperScript = 1;  
}

注: この問題はカスタム フォントに関連していると思いましたが、既定のフォントを使用すると問題が発生します。

これは Swift 3.1 に関連する問題であり、修正する必要がありますか?

4

1 に答える 1