NSMutableAttributedString 在特定范围的 tableviewcell 中不起作用

Posted

技术标签:

【中文标题】NSMutableAttributedString 在特定范围的 tableviewcell 中不起作用【英文标题】:NSMutableAttributedString not working in tableviewcell with a specific range 【发布时间】:2017-05-16 09:33:36 【问题描述】:

我关注了this question,但没有解决我的问题。

我在 ViewController 中有一个 tableviewtableviewcell 有一个标签。我想用NSStrikethroughStyleAttributeName 设置attributedString。如果我将完整的字符串设置为删除线,它可以工作如果我设置为部分它不起作用。

成功结果代码如下

let strOriginalPrice = "my price"
let strdiscountedPrice = "discounted price"
let strPrice = strOriginalPrice+" "+strdiscountedPrice

let attributeString: NSMutableAttributedString =  NSMutableAttributedString(string: strPrice)
 attributeString.addAttribute(NSStrikethroughStyleAttributeName, value: 2, range: NSMakeRange(0, attributeString.length))

cell.lblPrice.attributedText = attributeString 

下面的代码不起作用

let attributedDiscunt: NSMutableAttributedString =  NSMutableAttributedString(string: strPrice)
            attributedDiscunt.addAttribute(NSStrikethroughStyleAttributeName, value:2, range: NSMakeRange(0, strOriginalPrice.characters.count-1))

cell.lblPrice.attributedText = attributedDiscunt 

【问题讨论】:

ios 10.3 ?如果是这样的话:***.com/questions/43074652/… 是的,这是 iOS 10.3 中的一个错误。属性不再适用于您的字符串范围,仅适用于整个字符串。 iOS 10.3: NSStrikethroughStyleAttributeName is not rendered if applied to a sub range of NSMutableAttributedString的可能重复 @Maddy 因为由于 iOS 错误,该问题实际上只能在 iOS10.3 上重现,并且已经有另一个关于 SO 的问题指出了这一点(与下面的答案相反) t 解释),无论如何最好将问题标记为重复并重定向到上一个问题。 @Maddy 这并没有显示在他的代码中,那么与 Lion 或您的答案有什么真正的区别。您没有遵循其他问题的指示(添加基线)吗? 【参考方案1】:

试试这个,

   let strOriginalPrice = "my price"
    let strdiscountedPrice = "discounted price"
    let strPrice = strOriginalPrice+" "+strdiscountedPrice

 //        let attributeString: NSMutableAttributedString =  NSMutableAttributedString(string: strPrice)
//        attributeString.addAttribute(NSStrikethroughStyleAttributeName, value: 2, range: NSMakeRange(0, attributeString.length))

    let attributedDiscunt: NSMutableAttributedString =  NSMutableAttributedString(string: strPrice)
    attributedDiscunt.addAttribute(NSStrikethroughStyleAttributeName, value:2, range: NSMakeRange(0, strOriginalPrice.characters.count-1))
    attributedDiscunt.addAttribute(NSBaselineOffsetAttributeName, value: 0, range: NSMakeRange(0, strOriginalPrice.characters.count-1))


    cell.lblPrice.attributedText = attributedDiscunt

【讨论】:

以上是关于NSMutableAttributedString 在特定范围的 tableviewcell 中不起作用的主要内容,如果未能解决你的问题,请参考以下文章

富文本(NSMutableAttributedString)

NSMutableAttributedString的使用

NSMutableAttributedString使用介绍

在 NSMutableAttributedString 上模拟“initWithAttributedString”的 OCMock 失败

NSMutableAttributedString-富文本的使用

NSMutableAttributedString 未正确呈现