2015-03-02 78 views
4

想要更改html标签的对齐方式。什么都没有我在HTML中看不到任何CSS。没有更改设置的设置。我也直接在UILabel上设置左对齐。我错过了什么?NSAttributedString对齐方式不适用于html内容

该代码是UILabel扩展。

NSMutableParagraphStyle *paragraphStyle = [[NSMutableParagraphStyle alloc] init]; 
paragraphStyle.lineBreakMode = NSLineBreakByWordWrapping; 
paragraphStyle.alignment = NSTextAlignmentLeft; 

NSDictionary *attr = @{NSDocumentTypeDocumentAttribute: NSHTMLTextDocumentType, NSCharacterEncodingDocumentAttribute: @(NSUTF8StringEncoding), NSParagraphStyleAttributeName: paragraphStyle}; 
NSError *error = nil; 

NSMutableAttributedString *attributedText = [[NSMutableAttributedString alloc]initWithData:[html dataUsingEncoding:NSUTF8StringEncoding] options:attr documentAttributes:nil error:&error]; 

// also tried with this 
[attributedText addAttribute:NSParagraphStyleAttributeName value:paragraphStyle 
          range:NSMakeRange(0, html.length) 
    ]; 

self.attributedText = attributedText; 

编辑

好了,我创建了一个单独项目,并在那里,文本是左默认对齐。我必须找出为什么在上面的例子中的文字显示合理。无论如何,主要问题仍然存在,我无法更改默认对齐方式。在使用initWithString初始化属性字符串时它起作用。但在这种情况下,html不起作用。当像上面的例子那样initWithData,html工作但对齐不起作用。

运行这个片段,你会看到。

UILabel *label = [[UILabel alloc] init]; 
label.frame = CGRectMake(50, 50, 300, 400); 
label.backgroundColor = [UIColor yellowColor]; 
label.numberOfLines = 0; 
label.textAlignment = NSTextAlignmentRight; 

NSString *text = @"sfsf sldjfs fj <b>dsfjslf</b> dsfslkf jsfsfjsdkfsfsf sldjfs fj dsfjslf dsfslkf jsfsfjsdkflsfsf sldjfs fj dsfjslf dsfslkf jsfsfjsdkflsfsf sldjfs fj dsfjslf dsfslkf jsfsfjsdkflsfsf sldjfs fj dsfjslf dsfslkf jsfsfjsdkflsfsf sldjfs fj dsfjslf dsfslkf jsfsfjsdkflsfsf sldjfs fj dsfjslf dsfslkf jsfsfjsdkflsfsf sldjfs fj dsfjslf dsfslkf jsfsfjsdkflsfsf sldjfs fj dsfjslf dsfslkf jsfsfjsdkflsfsf sldjfs fj dsfjslf dsfslkf jsfsfjsdkflsfsf sldjfs fj dsfjslf dsfslkf jsfsfjsdkflsfsf sldjfs fj dsfjslf dsfslkf jsfsfjsdkflsfsf sldjfs fj dsfjslf dsfslkf jsfsfjsdkflsfsf sldjfs fj dsfjslf dsfslkf jsfsfjsdkflsfsf sldjfs fj dsfjslf dsfslkf jsfsfjsdkfll END"; 

NSMutableParagraphStyle *paragraphStyle = [[NSMutableParagraphStyle alloc] init]; 
paragraphStyle.lineBreakMode = NSLineBreakByWordWrapping; 
paragraphStyle.alignment = NSTextAlignmentRight; 

UIFont *font = [UIFont fontWithName:@"HelveticaNeue" size:14]; 
NSDictionary *attr = @{ 
         NSFontAttributeName: font, 
         NSDocumentTypeDocumentAttribute: NSHTMLTextDocumentType, 
         NSCharacterEncodingDocumentAttribute: @(NSUTF8StringEncoding), 
         NSParagraphStyleAttributeName: paragraphStyle}; 
NSError *error = nil; 

NSMutableAttributedString *attributedText = [[NSMutableAttributedString alloc]initWithData:[text dataUsingEncoding:NSUTF8StringEncoding] options:attr documentAttributes:nil error:&error]; 

[attributedText addAttribute:NSFontAttributeName value:font range:NSMakeRange(0, attributedText.length)]; 

NSLog(@"err: %@", error); 

label.attributedText = attributedText; 

[self.view addSubview:label]; 

编辑2:

案例1 - 解决 - 我的代码比对的地方后来被改变。没有看到。

案例2 - 解决 - 请参阅答案。

+0

@ IXX是它的工作 – 2017-07-25 19:58:28

回答

3

的问题是,由docinitWithData:options:documentAttributes:error:说只接受3个符合候选键:NSDocumentTypeDocumentAttributeNSCharacterEncodingDocumentAttributeNSDefaultAttributesDocumentAttribute

然后,在您的代码段中,您没有像以前的尝试那样在末尾应用NSParagraphStyleAttributedName

所以,从你的代码段,我把这个行:

[attributedText addAttribute:NSParagraphStyleAttributeName 
         value:paragraphStyle 
         range:NSMakeRange(0, attributedText.length)]; 

并删除了2无用从attr归因:

NSDictionary *attr = @{NSDocumentTypeDocumentAttribute: NSHTMLTextDocumentType, 
         NSCharacterEncodingDocumentAttribute: @(NSUTF8StringEncoding)}; 
1

嗯,我找到了一个解决方案。我假设对齐方式不起作用,因为它期望在html中使用这种属性。所以我把它添加到HTML:

text = [@"<style> p {text-align: right;}</style><body>" stringByAppendingFormat:@"<p>%@</p></body>", text]; 

与工程中心,左等