微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

从html创建nsattributedstring时,ios7的字体大小更改

我有一个UITextView,我正在管理一个NSAttributedString,最初通过键盘正常输入.我将归因的字符串保存为 HTML,看起来不错.
当我再次加载它,并将其转换回归属的字符串从HTML,字体大小似乎改变.

例如,加载的HTML如下所示:

<!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>

我转换它并使用以下代码检查属性

// 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);
        }
    }];

输出显示字体大小从21增加到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

基本上每次加载字符串时,字体大小都会增加.我需要将其存储为HTML而不是NSData,因为它也将被其他平台使用.

有人有什么想法为什么会发生这种情况吗?

解决方法

我也遇到这个问题,我通过迭代属性修复它,并重新排列旧的字体大小如下
NSMutableAttributedString *res = [attributedText mutablecopy];
[res beginEditing];
[res enumerateAttribute:NSFontAttributeName
                inRange:NSMakeRange(0,res.length)
                options:0
             usingBlock:^(id value,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];

原文地址:https://www.jb51.cc/html/224752.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐