如果应用范围不是整个字符串范围,则不会呈现作为NSMutableAttributedString
实例的属性添加的删除线(单,双,...)。
使用addAttribute(_ name: String, value: Any, range: NSRange)
,insert(_ attrString: NSAttributedString, at loc: Int)
,append(_ attrString: NSAttributedString)
,...
在早期的iOS 10.3测试版中被Apple破解,并未在10.3决赛中修复。
答案 0 :(得分:87)
设置基线偏移似乎可以解决它:
[attributedStr addAttribute:NSBaselineOffsetAttributeName value:@0 range:NSMakeRange(0, 10)];
[attributedStr addAttribute:NSStrikethroughStyleAttributeName value:@2 range:NSMakeRange(0, 10)];
这是iOS 10.3中已知的bug
答案 1 :(得分:24)
将NSBaselineOffsetAttributeName
添加到here,对于属性字符串会带回删除线。覆盖drawText:in:
可能会很慢,特别是在Collection View或Table View Cells上。
答案 2 :(得分:14)
为我们的特定方案找到了一种解决方法(我们不指定任何具有UILabel属性的样式,但所有属性都具有NSAttributedString
属性):
/// This UILabel subclass accomodates conditional fix for NSAttributedString rendering broken by Apple in iOS 10.3
final class PriceLabel: UILabel {
override func drawText(in rect: CGRect) {
guard let attributedText = attributedText else {
super.drawText(in: rect)
return
}
if #available(iOS 10.3, *) {
attributedText.draw(in: rect)
} else {
super.drawText(in: rect)
}
}
}
注意:如果你将UILabel的样式属性与NSAttributedString
属性混合在一起,你应该考虑在渲染之前创建一个新的属性字符串,在其上应用UILabel的样式,然后重新应用所有attributedText
的属性。
答案 3 :(得分:10)
用10.3
测试的swift 3工作代码let attributeString: NSMutableAttributedString = NSMutableAttributedString(string: "₹3500")
attributeString.addAttribute(NSBaselineOffsetAttributeName, value: 0, range: NSMakeRange(0, attributeString.length))
attributeString.addAttribute(NSStrikethroughStyleAttributeName, value: 1, range: NSMakeRange(0, attributeString.length))
productPriceLabel.attributedText = attributeString
答案 4 :(得分:10)
$ bash redirect.sh 8000 192.168.1.10/app1
$ bash redirect.sh 8001 192.168.1.11/app1
答案 5 :(得分:4)
它是Xcode 8.3(8E3004b)/ iOS 10.3已知的错误,此解决方法不需要额外的代码行,只需在声明[NSBaselineOffsetAttributeName:0]
时添加NSMutableAttributedString()
let attrStr = NSMutableAttributedString(string: YOUR_STRING_HERE, attributes: [NSBaselineOffsetAttributeName : 0])
// Now if you add the strike-through attribute to a range, it will work
attrStr.addAttributes([
NSFontAttributeName: UIFont.boldSystemFont(ofSize: 24),
NSStrikethroughStyleAttributeName: 1
], range: NSRange)
答案 6 :(得分:0)
对于Swift 5,NSBaselineOffsetAttributeName
已被kCTBaselineOffsetAttributeName
更改,并将更改每个新版本。