【问题标题】:Do NSAttributedString attributes stack when their ranges nest/overlap?当它们的范围嵌套/重叠时,NSAttributedString 属性是否会堆叠?
【发布时间】:2014-01-24 21:27:50
【问题描述】:

我正在将简单的 HTML 解析为属性字符串(对于 iOS 6),但我似乎无法让嵌套属性工作。例如:

This <font color="red">is <i>what</i> I mean</font> to achieve.

我正确地应用了属性,但是斜体永远不会生效,除非它是在字体颜色不影响的范围内完成的。我的谷歌搜索没有提出任何相关问题,我想知道 NSAttributedString 是否甚至完全支持这一点,或者属性范围是否必须不重叠。

编辑:

我已将问题改写为更清楚。问题的答案是响亮的“否”,您必须在单个属性字典中指定给定范围的所有属性,它们不会组合。我已接受对原始问题的合理回答是正确的。

【问题讨论】:

  • 我相信你需要把它分成不同的范围。将is 标记为红色。 Msrk what 为红色和斜体。并将“我的意思”标记为红色。
  • 尝试使用可以有斜体的字体。
  • 感谢 rmaddy,这就是我所追求的解决方案。
  • This example 显示重叠属性。

标签: ios uikit nsattributedstring


【解决方案1】:

您可以使用NSMutableAttributedString 获得您想要的结果。您只需要分别设置每个属性。例如

NSString *string = @"This is a test";
NSMutableAttributedString *attributedString = [[NSMutableAttributedString alloc] initWithString:string attributes:nil];

NSMutableDictionary *attributes = [@{NSForegroundColorAttributeName: [UIColor redColor]} mutableCopy];

[string setAttributes:attributes range:[string rangeOfString:@"is a test"];

[attributes setObject:font forKey:NSFontAttributeName];

[string setAttributes:attributes range:[string rangeOfString:@"test"];

【讨论】:

  • 这不会产生我想要的效果。字体属性覆盖颜色属性,我希望它们堆叠。不过谢谢,我猜这意味着属性不会嵌套。
  • 你说得对,我已经用正确的方法编辑了我的答案。
  • addAttribute 应该更好
  • 好的,这是实现我的示例的正确方法,但问题措辞不佳。我的意思是问属性是否在它们的范围重叠/嵌套时堆叠,答案是否定的,您必须按照本文中的描述进行操作并指定每个范围及其所有属性。
【解决方案2】:

是的,您可以为特定范围设置特定属性。想要多少就多少。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-06-10
    • 1970-01-01
    • 2016-06-30
    • 2021-01-26
    • 2010-12-29
    • 2021-07-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多