状态恢复期间的 UIAppearance 错误
UIAppearance bug during state restoration
更新
Matt 正确地指出我的原始项目在状态恢复方面存在错误。但是,即使在删除它之后,只要我在导航控制器中使用 table 视图并尝试设置 isTranslucent
属性 of [=11],我就能够重现问题=] 到 false
通过外观代理。
出于某种原因,当 iOS 恢复状态时,UIAppearance 会覆盖 viewDidLoad
中设置的值。这让我很头疼,我想知道如何解决这个问题。我认为这是一个错误。
Here 是我在 GitHub 上创建的一个小项目来说明这个问题。首次启动时,ViewController
中的标签字体已正确设置为 22 磅。但是,如果触发状态恢复,因为willFinishLaunching
.
中的出现方式,所以会是12点
其实这个问题的起因并不是我原先想的UILabel.appearance(whenContainedInInstancesOf: [UITableViewCell.self]).font = UIFont.systemFont(ofSize: 12)
。相反,UINavigationBar.appearance(whenContainedInInstancesOf: [GLXNavigationController.self]).isTranslucent = false
会导致这种行为。你可以很容易地自己验证一下。
解决此问题的一种方法是在 layoutSubviews
中再次设置字体,因为外观代理是在调用 layoutSubviews
之前应用的。但是,我不喜欢这种做法。
另一种可能的解决方案是为每个导航控制器手动设置 isTranslucent
。这是我选择的解决方案,但我仍然觉得外观代理存在错误。至少,我们应该期望初始启动和状态恢复之间的行为一致。
非常感谢任何帮助。
你的状态恢复错误:
将 didFinishLaunchingWithOptions
更改为 willFinishLaunchingWithOptions
。
并确保 willFinishLaunchingWithOptions
包含对 window 到 makeKeyAndVisible
的调用,即使它不包含任何其他内容。
这与 shouldSaveApplicationState
和 shouldRestoreApplicationState
的实施一起构成了 any 状态保存和恢复实施所需的底层样板。
更新
Matt 正确地指出我的原始项目在状态恢复方面存在错误。但是,即使在删除它之后,只要我在导航控制器中使用 table 视图并尝试设置 isTranslucent
属性 of [=11],我就能够重现问题=] 到 false
通过外观代理。
出于某种原因,当 iOS 恢复状态时,UIAppearance 会覆盖 viewDidLoad
中设置的值。这让我很头疼,我想知道如何解决这个问题。我认为这是一个错误。
Here 是我在 GitHub 上创建的一个小项目来说明这个问题。首次启动时,ViewController
中的标签字体已正确设置为 22 磅。但是,如果触发状态恢复,因为willFinishLaunching
.
其实这个问题的起因并不是我原先想的UILabel.appearance(whenContainedInInstancesOf: [UITableViewCell.self]).font = UIFont.systemFont(ofSize: 12)
。相反,UINavigationBar.appearance(whenContainedInInstancesOf: [GLXNavigationController.self]).isTranslucent = false
会导致这种行为。你可以很容易地自己验证一下。
解决此问题的一种方法是在 layoutSubviews
中再次设置字体,因为外观代理是在调用 layoutSubviews
之前应用的。但是,我不喜欢这种做法。
另一种可能的解决方案是为每个导航控制器手动设置 isTranslucent
。这是我选择的解决方案,但我仍然觉得外观代理存在错误。至少,我们应该期望初始启动和状态恢复之间的行为一致。
非常感谢任何帮助。
你的状态恢复错误:
将
didFinishLaunchingWithOptions
更改为willFinishLaunchingWithOptions
。并确保
willFinishLaunchingWithOptions
包含对 window 到makeKeyAndVisible
的调用,即使它不包含任何其他内容。
这与 shouldSaveApplicationState
和 shouldRestoreApplicationState
的实施一起构成了 any 状态保存和恢复实施所需的底层样板。