gpt4 book ai didi

ios - NSAttributedString 对齐不适用于 html 内容

转载 作者:可可西里 更新时间:2023-11-01 03:53:59 26 4
gpt4 key购买 nike

想要更改 html 标签的对齐方式。什么都不管用。我在 HTML 中没有看到任何 CSS。没有进一步的设置更改对齐方式。我还在 UILabel 上直接设置了左对齐。我错过了什么?

代码在 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 - 已解决 - 查看答案。

最佳答案

问题是doc所说的initWithData:options:documentAttributes:error:只接受 3 个可能的键:NSDocumentTypeDocumentAttribute , NSCharacterEncodingDocumentAttributeNSDefaultAttributesDocumentAttribute .

然后,对于您的代码段,您没有应用 NSParagraphStyleAttributedName在最后,就像您之前的尝试一样。

因此,根据您的代码段,我改为使用这一行:

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

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

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

关于ios - NSAttributedString 对齐不适用于 html 内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28816501/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com