NSAttributedStringalignment不能在html内容上工作

想要更改html标签的alignment方式。 没有任何工作 我没有看到HTML中的任何CSS。 没有更改设置的设置。 我也直接在UILabel上设置左alignment。 我错过了什么?

代码是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; 

编辑

好吧,所以我创build了一个单独的项目,在那里,默认情况下文本左alignment。 我必须找出为什么在上面的例子中的文字显示合理。 在任何情况下,主要问题依然存在,我不能改变默认alignment方式。 它在使用initWithString初始化属性string时起作用。 但在这种情况下,HTML不起作用。 当initWithData ,像上面的例子,HTML工作,但alignment不起作用。

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

 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 – 解决了 – 我稍后在代码alignment的地方正在改变。 没有看到。

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

问题是,由doc的 initWithData:options:documentAttributes:error:只接受3个可能的键: NSDocumentTypeDocumentAttributeNSCharacterEncodingDocumentAttributeNSDefaultAttributesDocumentAttribute

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

所以,从你的片段中,我把这条线,而不是:

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

并从attr移除了2个无用的属性:

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

那么,我find了一个解决scheme。 我假设alignment不起作用,因为它期望在HTML中的这种属性。 所以我把它添加到html:

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

与中心,左侧等一起工作