如何检测另一个应用是否 运行 在 iOS 11 中滑过?

How to detect if another app is running as slide over in iOS 11?

多任务处理功能在 iOS 11 中得到了更新,其中之一是 slide over,在下面的 gif 中进行了演示。

进行这些更改后,将无法再使用 检测其他应用是否比我的应用 "slide over" 高。

是否有任何新方法可以检测另一个应用是否运行 滑过?

我能够在 iPad Pro(支持并排应用程序,而不仅仅是幻灯片)上相当轻松地完成这项工作。这是代码:

class ViewController: UIViewController {

    override func viewWillLayoutSubviews() {
        isThisAppFullScreen()
    }

    @discardableResult func isThisAppFullScreen() -> Bool {
        let isFullScreen = UIApplication.shared.keyWindow?.frame == UIScreen.main.bounds
        print("\(#function) - \(isFullScreen)")
        return isFullScreen
    }
}

最终结果是,如果视图是全屏,它将打印 "true",如果它与另一个应用程序共享屏幕,它将打印 "false",并且每次都是 运行显示、隐藏或调整大小。

那么问题是旧设备只支持侧滑。有了这些,您的应用程序就不会再被调整大小了。相反,它只是放弃主动使用,而另一个应用程序正在变得活跃。

在这种情况下,您所能做的就是将逻辑放在AppDelegate 中以查找applicationWillResignActiveapplicationDidBecomeActive。当您滑过时,您会得到 applicationWillResignActive 而不是 applicationDidEnterBackground

您可以将此视为一种可能性,但您无法区分滑过和从屏幕顶部向下滑动查看通知。由于这个原因,它并不理想,但监控应用程序生命周期可能是您能做的最好的事情。