NSMutableAttributedString 在特定范围的 tableviewcell 中不起作用
Posted
技术标签:
【中文标题】NSMutableAttributedString 在特定范围的 tableviewcell 中不起作用【英文标题】:NSMutableAttributedString not working in tableviewcell with a specific range 【发布时间】:2017-05-16 09:33:36 【问题描述】:我关注了this question,但没有解决我的问题。
我在 ViewController 中有一个 tableview
,tableviewcell
有一个标签。我想用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 上模拟“initWithAttributedString”的 OCMock 失败