多任务处理功能在iOS 11中得到了更新,其中一个是
slide over,在下面的gif中进行了演示.
通过这些更改,再也无法使用techniques that check frame size from iOS 9来检测是否有其他应用程序在我的应用上“滑过”.
解决方法
我能够在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”,并且每次显示,隐藏或调整大小时都会运行此操作.
我制作了一个显示结果的简单视频,这里:
https://www.dropbox.com/s/g8pqboj9jjhnlca/FullScreenOrNotTest.mov?dl=0
问题是旧设备只支持滑动.有了这些,您的应用程序将不再调整大小.相反,它只是辞职正在使用,另一个应用程序正在变得活跃.
在这种情况下,您所能做的就是在AppDelegate中放置逻辑以查找applicationWillResignActive和applicationDidBecomeActive.当您滑过时,您将获得applicationWillResignActive而不是applicationDidEnterBackground.
您可以将此作为一种可能性进行查找,但无法区分滑动和通知从屏幕顶部向下滑动.由于这个原因,它并不理想,但监控应用程序生命周期可能是您可以做的最好的.