Fix on-screen navigation hiding

This commit is contained in:
Ali 2020-10-27 20:12:43 +04:00
parent 65d707fa4f
commit 50386f0bd4

View File

@ -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
}
}