iOS 为什么 NSParagraphStyle 会重置原始文本样式

iOS why NSParagraphStyle resets the original text styles

我使用UILabelattributedText加载一个HTML字符串,例如:

<p style="text-align: center;">sometext</p>

我用NSParagraphStyle改变了这个HTML所有元素的line-height

NSMutableParagraphStyle *paragraphStyle = [NSMutableParagraphStyle new];
paragraphStyle.minimumLineHeight = 20; // line-height: 20;

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

有效。但它会将 text-align 重置为左侧。

属性就像字典一样工作:Key/Value 在定义的范围内。 键的唯一性,所以你覆盖了值而不是复制它以前的样式。

要执行您想要的操作,您需要枚举属性字符串以查找 NSParagraphStyleAttributeName 并在必要时进行修改。

[attributedString enumerateAttribute:NSParagraphStyleAttributeName inRange:NSMakeRange(0, [attributedString length]) options:0 usingBlock:^(id  _Nullable value, NSRange range, BOOL * _Nonnull stop) {
    if ([value isKindOfClass:[NSParagraphStyle class]]) {
        NSMutableParagraphStyle *style = [value mutableCopy];
        style.minimumLineHeight = 20;
        [attributedString addAttribute:NSParagraphStyleAttributeName value:style range:range];
    }
}];