I have a textView that allow user to enter NSAttributedString, convert into html string and then store into database. I also have code to convert the html string back and display in textView for editing. The conversion codes I have are
extension String { func htmlAttributedString() -> NSAttributedString? { guard let data = self.data(using: String.Encoding.utf16, allowLossyConversion: false) else { return nil } guard let html = try? NSMutableAttributedString( data: data, options: [NSDocumentTypeDocumentAttribute: NSHTMLTextDocumentType], documentAttributes: nil) else { return nil } return html } } extension NSAttributedString { func htmlString() -> String? { let documentAttributes = [NSDocumentTypeDocumentAttribute: NSHTMLTextDocumentType] do { let htmlData = try self.data(from: NSMakeRange(0, self.length), documentAttributes:documentAttributes) if let htmlString = String(data:htmlData, encoding:String.Encoding.utf8) { return htmlString } } catch {} return nil } } However the problem is that every time when I save and display the string, all font size increases. For example, I have a html string
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <meta http-equiv="Content-Style-Type" content="text/css"> <title></title> <meta name="Generator" content="Cocoa HTML Writer"> <style type="text/css"> p.p1 {margin: 0.0px 0.0px 0.0px 0.0px; font: 17.0px '.SF UI Text'; color: #000000} span.s1 {font-family: '.SFUIText'; font-weight: normal; font-style: normal; font-size: 17.00pt} </style> </head> <body> <p class="p1"><span class="s1">text</span></p> </body> </html> After I convert it into NSAttributedString and back again, everything else are the same but the css lines are changed to this.
<style type="text/css"> p.p1 {margin: 0.0px 0.0px 0.0px 0.0px; line-height: 28.0px; font: 22.7px '.SF UI Text'; color: #000000; -webkit-text-stroke: #000000} span.s1 {font-family: '.SFUIText'; font-weight: normal; font-style: normal; font-size: 22.67pt; font-kerning: none} </style> Am I missing anything? Any helps are appreciated!