修改状态栏方向后APP前后台切换生命周期回调异常原因咨询
为什么切换状态栏方向后,后台切前台会触发两次生命周期回调?
这事儿其实和你用的那个已经被苹果废弃的状态栏方向设置方法有直接关系,咱们拆解开说:
废弃方法的隐性副作用:你调用的
UIApplication.shared.setStatusBarOrientation(.landscapeRight, animated: true)在iOS 9之后就被标记为废弃了,官方早就不推荐直接用这个方法强制修改界面方向。它会打乱系统原本的方向管理逻辑,导致应用内部状态出现异常——当你调用这个方法时,系统为了适配新方向,会短暂让应用进入非活跃状态再恢复,这时候其实已经悄悄触发了一轮ApplicationWillResignActive和ApplicationDidBecomeActive。后台切换时的叠加触发:等你把应用切到后台,系统会正常触发一次
ApplicationWillResignActive;切回前台时,原本应该只触发一次ApplicationDidBecomeActive,但因为之前强制改方向留下的状态混乱,系统会额外再触发一轮完整的willResign和didBecome回调,所以你就看到了两次打印。靠谱的修复方式:别再用这个废弃方法啦!如果要控制界面方向,应该在对应的
UIViewController里重写方向相关的方法,让系统来管理逻辑,这样就能避免这种异常回调。比如你想让某个控制器强制横屏,可以这么写:
override var supportedInterfaceOrientations: UIInterfaceOrientationMask { return .landscapeRight } override var preferredInterfaceOrientationForPresentation: UIInterfaceOrientation { return .landscapeRight }
这样系统就能按照正常逻辑处理方向变化,不会再出现额外的生命周期回调触发问题了。
内容的提问来源于stack exchange,提问作者ViQ
相关产品推荐
相关产品推荐

