I noticed the following problem:How to reproduce: 1. Set a NSAttributedString with strikethroughStyle and NSUnderlineStyle.single to a label's attributedText property. 2. Set the label's text property to nil. 3. Set a NSAttributedString with some attributes but without strikethroughStyle to the label's attributedText property. 4. Then the label's text is strikethrough on iOS 13 beta 6.On iOS 12, the attributes where removed when setting the label's text property to nil.The following demo code shows the behaviour:import UIKit
class ViewController: UIViewController {
lazy var label1: UILabel = {
let result = UILabel(frame: CGRect(x: 10, y: 100, width: 300, height: 50))
result.backgroundColor = UIColor.lightGray
result.text = "label 1"
return result
}()
lazy var label2: UILabel = {
let result = UILabel(frame: CGRect(x: 10, y: 150, width: 300, height: 50))
result.backgroundColor = UIColor.lightGray
result.text = "label 2"
return result
}()
lazy var button: UIButton = {
let result = UIButton(frame: CGRect(x: 10, y: 200, width: 300, height: 50))
result.addTarget(self, action: #selector(buttonPressed(_:)), for: .touchUpInside)
result.setTitle("PRESS ME", for: .normal)
result.backgroundColor = .black
return result
}()
static var count = 0
override func viewDidLoad() {
super.viewDidLoad()
self.view.addSubview(label1)
self.view.addSubview(label2)
self.view.addSubview(button)
}
@objc
func buttonPressed(_ button: UIButton) {
let attrRedStrikethroughStyle = [
NSAttributedString.Key.strikethroughStyle: NSNumber(value: NSUnderlineStyle.single.rawValue)
]
let attrBlueNoStrikethroughStyle = [
NSAttributedString.Key.foregroundColor: UIColor.red,
]
switch type(of: self).count%3 {
case 0:
let text = NSAttributedString(string: "This should be strikethrough.",
attributes: attrRedStrikethroughStyle)
label1.attributedText = text
label2.attributedText = text
case 1:
label1.text = nil
// label2.text = nil // If this line is active the strikethroughStyle will still be shown.
// However, if label2.attributedText = nil is executed fist, it will work.
label2.attributedText = nil
default:
let text = NSAttributedString(string: "This should NOT be strikethrough.",
attributes: attrBlueNoStrikethroughStyle)
label1.attributedText = text
label2.attributedText = text
}
type(of: self).count += 1
}
/*
How to reproduce:
1. Set a NSAttributedString with strikethroughStyle and NSUnderlineStyle.single to a label's attributedText property.
2. Set the label's text property to nil.
3. Set a NSAttributedString with some attributes but without strikethroughStyle to the label's attributedText property.
Then the label's text is strikethrough on iOS 13 beta 6. On iOS 12 this was not the case.
The example code shows the two different behaviors.
*/
}Is this something that will be fixed in the release of iOS 13?