带有变体的属性 UILabel 在应用程序发送到后台后重置文本

Attributed UILabel with Variation resets text after app was sent to background

我使用的是带有 Regular x Regular 变体的属性 UILabel。请参阅以下屏幕截图:

在我的视图控制器中,我正在为 UILabel:

设置一个文本值
class ViewController: UIViewController
{
    // MARK: - Outlets
    @IBOutlet weak var myLabel: UILabel!

    // MARK: - Life Cycle
    override func viewDidLoad()
    {
        super.viewDidLoad()
        myLabel.text = "THIS IS MY TEXT"
    }
}

当我 运行 设备上的应用 (iOS 13) 标签显示正确的文本 ("THIS IS MY TEXT") 时。但是如果我将应用程序发送到后台并再次打开它,标签会将文本重置为 "Label",即我在代码中设置的文本丢失了。请观看 this 视频以获得更好的理解。

On iOS 12 根本无法在代码中更改文本。 如果我删除 Variation,那么一切正常。

发生这种情况是因为当应用程序进入后台时,特征集合正在发生变化,并且您使标签文本依赖于垂直和水平大小等特征 class。

您在情节提要中定义了两个不同大小的文本 classes,并且您在加载视图后更新一次文本,但应用程序对更改的反应与您使用大小时预期的一样 classes.

这就是每次特征集合更改时应用程序重新加载文本的原因。

您应该覆盖视图控制器中的方法 traitCollectionDidChange(_:) 并根据实际特征集合更新那里的文本。