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?

Original source

Related problems