为什么在iOS 11中,我的UIApplicationState显示为非活动状态而不是活动状态?

为什么在iOS 11中,我的UIApplicationState显示为非活动状态而不是活动状态?

问题描述:

我已经更新到最新的xcode - 9和iOS 11,现在我面临UIApplicationState问题。任何人都可以告诉我为什么苹果在ApplicationState中做了这些更改。为什么在iOS 11中,我的UIApplicationState显示为非活动状态而不是活动状态?

例如: 期间的viewController viewWillAppear中,我检查UIApplicationState:

 UIApplicationState applicationState = [UIApplication sharedApplication].applicationState; 
     if (applicationState == UIApplicationStateActive) 
     { 
     } 

但我正在逐渐applicationState = UIApplicationStateInactive。

或者我需要通过额外的代码为iOS版本11分别处理:

if (applicationState == UIApplicationStateActive || (@available(iOS 11, *) && applicationState == UIApplicationStateInactive)){ 
} 

任何其他的答案始终保持在所有版本的应用程序的状态?

由于提前,

+0

同样的事情发生在这里 – Jacky

** 修订ANSWER **

我用下面的代码来既在iOS 10和iOS 11设备上测试的状态。

import UIKit 

class ViewController: UIViewController { 
    override func viewDidLoad() { 
     super.viewDidLoad() 
     print("\(#function) active: \(UIApplication.shared.applicationState == .active)") 
    } 

    override func viewWillAppear(_ animated: Bool) { 
     super.viewWillAppear(animated) 
     print("\(#function) active: \(UIApplication.shared.applicationState == .active)") 
    } 

    override func viewDidAppear(_ animated: Bool) { 
     super.viewDidAppear(animated) 
     print("\(#function) active: \(UIApplication.shared.applicationState == .active)") 

     DispatchQueue.main.asyncAfter(deadline: .now() + 0.25) { 
      print("\(#function) with delay active: \(UIApplication.shared.applicationState == .active)") 
     } 
    } 
} 

在iOS上运行10:

viewDidLoad() active: false 
viewWillAppear active: false 
viewDidAppear active: true // This differs from 11 
viewDidAppear with delay active: true 

iOS上运行11时:

viewDidLoad() active: false 
viewWillAppear active: false 
viewDidAppear active: false 
viewDidAppear with delay active: true 

我不能告诉你,如果这是有意还是无意的,但有些事情肯定改变。也许在它上面有一个雷达?

+0

我试图检查UIApplicationState在viewDidAppear,不太可能我仍然只是“UIApplicationStateInactive”而不是活动状态。 –

+0

@AbilashBNair用示例代码更新了答案。 – CodeBender