ios - 状态恢复时 Root View Controller 显示短暂

标签 ios iphone ios7 state-restoration

我使用SDK提供的状态恢复。

我从 Storyboard加载所有 View Controller 。初始 View Controller 以模态方式显示另一个 View Controller 。两者都有一个恢复标识符。

恢复工作正常,但是:当我处于模态呈现的 View Controller 并按主页(保存状态)时。然后重新打开应用程序并开始恢复状态,会发生以下情况:

有那么一瞬间,我看到了初始 View Controller ,然后屏幕变为我真正想要看到的模态呈现的 Controller 。

为什么会发生这种情况?缓存目录中的快照确实显示了正确的屏幕(来自呈现的 View Controller )。

您可以使用 this project 重现该问题。在初始 View Controller 的 viewDidAppear 方法中添加断点,当恢复状态时,您将在屏幕和 View 层次结构中看到初始 View Controller 的 View :

(lldb) po [[UIWindow keyWindow] recursiveDescription]
<UIWindow: 0x155607f0; frame = (0 0; 320 480); autoresize = W+H; gestureRecognizers = <NSArray: 0x15560d20>; layer = <UIWindowLayer: 0x1555f4f0>>
   | <UIView: 0x15542ad0; frame = (0 0; 320 480); autoresize = RM+BM; layer = <CALayer: 0x15542a70>>
   |    | <UIButton: 0x155432d0; frame = (137 269; 46 30); opaque = NO; autoresize = RM+BM; layer = <CALayer: 0x15543b30>>
   |    |    | <UIButtonLabel: 0x15663dd0; frame = (0 6; 46 18); text = 'Button'; clipsToBounds = YES; opaque = NO; userInteractionEnabled = NO; layer = <CALayer: 0x1566da20>>
   |    | <_UILayoutGuide: 0x15542b60; frame = (0 0; 0 20); hidden = YES; layer = <CALayer: 0x15542fe0>>
   |    | <_UILayoutGuide: 0x15541060; frame = (0 480; 0 0); hidden = YES; layer = <CALayer: 0x155410d0>>

如果您检查 View Controller 层次结构,模态呈现的 View Controller 不在初始 View Controller 呈现的属性中:

(lldb) po [[[UIWindow keyWindow] rootViewController] presentedViewController]
 nil

断点是在(理论上)状态恢复之后。但稍后它会被正确设置。

最佳答案

在使用 Storyboard 时,似乎会发生这个问题,您让框架为您调用 [window makeKeyAndVisible] 并且它在恢复后发生。

如果将下一行添加到application:willFinishLaunchingWithOptions:

[self.window makeKeyAndVisible];

它会修复它。

关于ios - 状态恢复时 Root View Controller 显示短暂,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21878076/

相关文章:

iOS 7 问题 : viewDidDisappear not being called after viewWillDisappear

ios - (Swift 3) - 如何在自定义 UIView 中包含动画

iOS 有一种方法可以将本地化字符串分配给 IB/ Storyboard中的 UILabel

ios - 标签不适合 TableView

iphone - 无法在 iTunes 连接中为 AppStore 中的实时应用程序获取崩溃报告

iphone - 如何将数据从选项卡栏 Controller 传递到其中一个选项卡?

ios - 如何在 Google MapView iOS Swift 4 上呈现来自 Web Api 的地址数组

ios - 在iPhone上启动libgdx项目时出现PropertyListFormatException

search - iOS 7 上的 iTunes 搜索 URL 显示 "Cannot connect to iTunes Store"

ios - 非续订订阅是否需要还原按钮?