UIApplication DidBecomeActiveNotification 被触发后会调用啥?
Posted
技术标签:
【中文标题】UIApplication DidBecomeActiveNotification 被触发后会调用啥?【英文标题】:What gets called after UIApplicationDidBecomeActiveNotification gets triggered?UIApplication DidBecomeActiveNotification 被触发后会调用什么? 【发布时间】:2012-01-02 13:27:19 【问题描述】:在我的应用程序中,我试图让我的导航栏在手机旋转到水平方向时不会从 44 像素缩小到 32 像素。我已经能够通过在视图旋转时以及在 viewDidAppear 中设置 navigationBars 框架来实现这一点。但是,当我按下主页按钮退出应用程序然后我重新进入应用程序时,导航栏仍然缩小。所以我实现了一个通知来检测 UIApplicationDidBecomeActiveNotification,并在那个方法中我将 navigationBar 框架高度重置为 44px。但是,它不起作用,因为正在调用某些东西正在重置我的视图框架。有谁知道触发 UIApplicationDidBecomeActiveNotification 后会调用什么来重置视图控制器框架?
【问题讨论】:
您的视图是由 nib 构成的吗? @kocodude - 不,它是以编程方式构建的。 【参考方案1】:在您的应用程序中,任何类都可以成为不同通知的“观察者”。创建视图控制器时,您可以将其注册为 UIApplicationDidBecomeActiveNotification 的观察者,并指定当通知发送到您的应用程序时要调用的方法。
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(myMethod:) name: UIApplicationDidBecomeActiveNotification object:nil];
根据您的需要删除 ViewWillDisappear/viewDidDisAppear/Dealloc 中的观察者:
[[NSNotificationCenter defaultCenter] removeObserver:self];
【讨论】:
是的,我这样做了。在视图从非活动状态恢复后,它会以某种方式重置它的框架,或者重新组织它的布局,我想知道到底发生了什么。 当应用程序激活时,它会发布通知,我们添加了观察者来捕获该通知,然后我们在其中定义的任务将起作用。这很简单。您可以参考以下开发者链接以获取有关通知的一些信息-developer.apple.com/library/mac/#documentation/Cocoa/Reference/… 是的,我知道。我是说,除此之外,当应用程序变为活动状态时,还会调用其他东西来重置导航栏框架。 可能有一些,但我也不知道。如果有的话,请在此处发布。 @CoDEFRo,我遇到了类似的问题。你解决过这个问题吗?【参考方案2】:我也有同样的问题,如果你通过 Key Value Observers 附加一个观察者,你可以看到在 UIApplicationDidBecomeActiveNotification 之后调用了一些东西。
【讨论】:
以上是关于UIApplication DidBecomeActiveNotification 被触发后会调用啥?的主要内容,如果未能解决你的问题,请参考以下文章
UIApplication.sharedApplication.delegate.window 和 UIApplication.sharedApplication.keyWindow 有啥区别?