簡體   English   中英

更改Swift NSAttributedString的無序列表的字體

[英]Changing Font for Unordered List for Swift NSAttributedString

我試圖從HTML字符串中創建NSAttributedString,但是我必須更改字符串的字體。 我能夠通過執行以下操作成功實現此目標:

let myOriginalString: String = "<!DOCTYPE html>
                    <head>
                      <style type=\"text/css\">
                        body{font-family: '-apple-system','Avenir-Medium',`Avenir-Black`; font-size:14;}
                      </style>
                    <body>
                      My HTML content
                    </body>"

let data: Data = myOriginalString.data(using: .utf8)

let myConvertedString: NSAttributedString = NSAttributedString(data: data, options: [.documentType: NSAttributedString.DocumentType.html, .characterEncoding: String.Encoding.utf8.rawValue], documentAttributes: nil)

myConvertedString上呈現myConvertedString ,文本使用正確的字體。

但是,當我嘗試執行相同的轉換(其中HTML正文包含無序列表)時無序列表中的內容不是我指定的格式:

let myOriginalString: String = "<!DOCTYPE html>
                    <head>
                      <style type=\"text/css\">
                        body{font-family: '-apple-system','Avenir-Medium',`Avenir-Black`; font-size:14;}
                      </style>
                    <body>
                      My HTML content
                      <ul>
                        <li>Item 1</li>
                        <li>Item 2</li>
                      </ul>
                    </body>"

let data: Data = myOriginalString.data(using: .utf8)

let myConvertedString: NSAttributedString = NSAttributedString(data: data, options: [.documentType: NSAttributedString.DocumentType.html, .characterEncoding: String.Encoding.utf8.rawValue], documentAttributes: nil)

當在屏幕上呈現myConvertedString ,字符串My HTML Content具有正確的格式,但是Item 1Item 2不在我指定的字體中。

我嘗試為ul標簽和li標簽添加樣式,但是結果相同。

為什么NSAttributedString用正確的字體渲染所有文本,除了無序列表? 有沒有更好的方法用NSAttributedString創建無序列表而不是使用html?

我剛剛在Arial上嘗試過,它的工作原理是:

override func viewDidLoad() {
        super.viewDidLoad()

        let myOriginalString = """
        <!DOCTYPE html>
        <head>
        <style type="text/css">
        body {
            font-family: Arial;
            font-size: 32px;
            color: red;
        }
        </style>
        <body>
        My HTML content
        <ul>
            <li>Item 1</li>
            <li>Item 2</li>
        </ul>
        </body>
        """

        if let data = myOriginalString.data(using: .utf8) {

            if let converted = try? NSAttributedString(data: data, options: [.documentType: NSAttributedString.DocumentType.html, .characterEncoding: String.Encoding.utf8.rawValue], documentAttributes: nil) {

                textView.attributedText = converted
            }
        }
    }

我發現使用NSMutableParagraphStyle代替使用HTML無序列表比找到更好的解決方案:

let myAttributedString = NSMutableAttributedString()

// Create a paragraph style
let paragraphStyle: NSMutableParagraphStyle = NSParagraphStyle.default.mutableCopy() as! NSMutableParagraphStyle
            paragraphStyle.tabStops = [NSTextTab(textAlignment: .left, location: 10, options: [:])]
            paragraphStyle.firstLineHeadIndent = 0
            paragraphStyle.headIndent = 10

let item1 =  NSMutableAttributedString(string: "\u{2022} Item1\n\n", attributes: [.font: UIFont.systemFont(ofSize: 14.0), .paragraphStyle: paragraphStyle])

let item2 =  NSMutableAttributedString(string: "\u{2022} Item2\n\n", attributes: [.font: UIFont.systemFont(ofSize: 14.0), .paragraphStyle: paragraphStyle])

myAttributedString.append(item1)
myAttributedString.append(item2)

現在, myAttributedString以正確的字體和正確的樣式打印出item1item2 (包裝的單詞的item2值與項目符號點不同)

我認為HTML部分出現的字體不正確,因為我試圖創建一個NSAttributedString,該NSAttributedString包含一些普通的NSAttributedString,一個HTML NSAttributedString,然后是更多的普通NSAttributedStrings。 我不認為這應該是一個問題,也許是一個錯誤???

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM