iOS 为什么 NSParagraphStyle 会重置原始文本样式
iOS why NSParagraphStyle resets the original text styles
我使用UILabel
的attributedText
加载一个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];
}
}];
我使用UILabel
的attributedText
加载一个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];
}
}];