gpt4 book ai didi

ios - 状态恢复期间的 UIAppearance 错误

转载 作者:行者123 更新时间:2023-11-28 20:55:49 32 4
gpt4 key购买 nike

更新

Matt 正确地指出我的原始项目在状态恢复方面存在错误。但是,即使在删除它之后,只要我在导航 Controller 中使用 TableView 并尝试设置 UINavigationBarisTranslucent 属性,我就能够重现问题通过外观代理为 false


出于某种原因,当 iOS 恢复状态时,UIAppearance 会覆盖 viewDidLoad 中设置的值。这让我很头疼,我想知道如何解决这个问题。我将其视为错误。

Here是我在 GitHub 上创建的一个小项目来说明这个问题。首次启动时,ViewController 中的标签字体已正确设置为 22 磅。但是,如果触发状态恢复,则因为willFinishLaunching中的appearance方法,会是12点。

其实这个问题的起因并不是我原先想的UILabel.appearance(whenContainedInInstancesOf: [UITableViewCell.self]).font = UIFont.systemFont(ofSize: 12)。相反,UINavigationBar.appearance(whenContainedInInstancesOf: [GLXNavigationController.self]).isTranslucent = false 会导致这种行为。您可以轻松地自己验证。

解决此问题的一种方法是在 layoutSubviews 中再次设置字体,因为外观代理是在调用 layoutSubviews 之前应用的。但是,我不喜欢这种方法。

另一种可能的解决方案是为每个导航 Controller 手动设置 isTranslucent。这是我选择的解决方案,但我仍然觉得外观代理存在错误。至少,我们应该期望初始启动和状态恢复之间的行为一致。

非常感谢任何帮助。

最佳答案

你做的状态恢复是错误的:

  • didFinishLaunchingWithOptions 更改为 willFinishLaunchingWithOptions

  • 并确保 willFinishLaunchingWithOptions 包含对 makeKeyAndVisible 窗口的调用,即使它不包含任何其他内容也是如此。

这与 shouldSaveApplicationStateshouldRestoreApplicationState 的实现一起构成了任何状态保存和恢复实现所需的底层样板。

关于ios - 状态恢复期间的 UIAppearance 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52519261/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com