ios7 font size change when create nsattributedstring from html
fonts, html, ios7, nsattributedstring
Solution
I also faced this issue, I fixed it by iterating to the attributes and reseting the old font size as follows
NSMutableAttributedString *res = [attributedText mutableCopy];
[res beginEditing];
[res enumerateAttribute:NSFontAttributeName
inRange:NSMakeRange(0, res.length)
options:0
usingBlock:^(id value, NSRange range, BOOL *stop) {
if (value) {
UIFont *oldFont = (UIFont *)value;
UIFont *newFont = [oldFont fontWithSize:15];
[res addAttribute:NSFontAttributeName value:newFont range:range];
}
}];
[res endEditing];
[self.textFileInputView setAttributedText:res];
Problem
I have a UITextView where I'm managing an NSAttributedString, initially entered as normal via the keyboard. I save the attributed string as HTML, which looks fine. When I load it again, and convert it back to an attributed string from the HTML, the font size appears to change. For example, the HTML on loading looks like this: ``` <!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: 21.0px Helvetica; color: #000000; -webkit-text- stroke: #000000} span.s1 {font-family: 'Helvetica'; font-weight: normal; font-style: normal; font-size: 21.00pt; font-kerning: none} </style> </head> <body> <p class="p1"><span class="s1">There is some text as usual lots of text</span></p> </body> </html> ``` I convert it and check the attributes with the following code: ``` // convert to attributed string NSError *err; NSAttributedString *as = [[NSAttributedString alloc] initWithData:data3 options:@{NSDocumentTypeDocumentAttribute: NSHTMLTextDocumentType, NSCharacterEncodingDocumentAttribute: @(NSUTF8StringEncoding)} documentAttributes:nil error:&err] ; NSMutableAttributedString *res = [as mutableCopy]; [res enumerateAttribute:NSFontAttributeName inRange:NSMakeRange(0, res.length) options:0 usingBlock:^(id value, NSRange range, BOOL *stop) { if (value) { UIFont *oldFont = (UIFont *)value; NSLog(@"On Loading: Font size %f, in range from %d length %d", oldFont.pointSize, range.location, range.length); } }]; ``` The output shows that the font size has increased from 21 to 28: ``` On Loading: Font size 28.000000, in range from 0 length 40 On Loading: Font size 21.000000, in range from 40 length 1 ``` Basically, each time I load the string, the font size increases. I need to store it as HTML rather than as NSData because it will also be used by other platforms. Does anyone have any ideas why this is happening?