diff --git a/submodules/Display/Source/Navigation/NavigationController.swift b/submodules/Display/Source/Navigation/NavigationController.swift index 815b56521d..e9281d4c44 100644 --- a/submodules/Display/Source/Navigation/NavigationController.swift +++ b/submodules/Display/Source/Navigation/NavigationController.swift @@ -355,6 +355,8 @@ open class NavigationController: UINavigationController, ContainableController, } } + let initialPrefersOnScreenNavigationHidden = self.collectPrefersOnScreenNavigationHidden() + var overlayLayout = layout if let globalOverlayContainerParent = self.globalOverlayContainerParent { @@ -988,10 +990,15 @@ open class NavigationController: UINavigationController, ContainableController, self.isUpdatingContainers = false if notifyGlobalOverlayControllersUpdated { - self.globalOverlayControllersUpdated?() + self.internalGlobalOverlayControllersUpdated() } self.updateSupportedOrientations?() + + let updatedPrefersOnScreenNavigationHidden = self.collectPrefersOnScreenNavigationHidden() + if initialPrefersOnScreenNavigationHidden != updatedPrefersOnScreenNavigationHidden { + self.currentWindow?.invalidatePrefersOnScreenNavigationHidden() + } } private func controllerRemoved(_ controller: ViewController) { @@ -1184,7 +1191,7 @@ open class NavigationController: UINavigationController, ContainableController, if overlayContainer.controller === controller { overlayContainer.removeFromSupernode() strongSelf.globalOverlayContainers.remove(at: i) - strongSelf.globalOverlayControllersUpdated?() + strongSelf.internalGlobalOverlayControllersUpdated() break } } @@ -1194,6 +1201,7 @@ open class NavigationController: UINavigationController, ContainableController, if overlayContainer.controller === controller { overlayContainer.removeFromSupernode() strongSelf.overlayContainers.remove(at: i) + strongSelf.internalOverlayControllersUpdated() break } } @@ -1395,4 +1403,21 @@ open class NavigationController: UINavigationController, ContainableController, } } } + + private func internalGlobalOverlayControllersUpdated() { + self.globalOverlayControllersUpdated?() + self.currentWindow?.invalidatePrefersOnScreenNavigationHidden() + } + + private func internalOverlayControllersUpdated() { + self.currentWindow?.invalidatePrefersOnScreenNavigationHidden() + } + + private func collectPrefersOnScreenNavigationHidden() -> Bool { + var hidden = false + if let overlayController = self.topOverlayController { + hidden = hidden || overlayController.prefersOnScreenNavigationHidden + } + return hidden + } }