Fixed on-screen navigation concealment

This commit is contained in:
Ilya Laktyushin 2019-10-04 05:47:25 +03:00
parent 0a717a2173
commit a2fcff1b35
3 changed files with 17 additions and 1 deletions

View File

@ -17,6 +17,7 @@ public protocol ContainableController: class {
func combinedSupportedOrientations(currentOrientationToLock: UIInterfaceOrientationMask) -> ViewControllerSupportedOrientations
var deferScreenEdgeGestures: UIRectEdge { get }
var prefersOnScreenNavigationHidden: Bool { get }
func containerLayoutUpdated(_ layout: ContainerViewLayout, transition: ContainedViewLayoutTransition)
func updateToInterfaceOrientation(_ orientation: UIInterfaceOrientation)

View File

@ -108,6 +108,9 @@ open class NavigationController: UINavigationController, ContainableController,
public var lockOrientation: Bool = false
public var deferScreenEdgeGestures: UIRectEdge = UIRectEdge()
public var prefersOnScreenNavigationHidden: Bool {
return (self.topViewController as? ViewController)?.prefersOnScreenNavigationHidden ?? false
}
private let mode: NavigationControllerMode
private var theme: NavigationControllerTheme
@ -153,6 +156,14 @@ open class NavigationController: UINavigationController, ContainableController,
return self._viewControllers.last
}
var topOverlayController: ViewController? {
if let overlayContainer = self.overlayContainers.last {
return overlayContainer.controller
} else {
return nil
}
}
private var _displayNode: ASDisplayNode?
public var displayNode: ASDisplayNode {
if let value = self._displayNode {

View File

@ -1210,7 +1210,11 @@ public class Window1 {
}
private func collectPrefersOnScreenNavigationHidden() -> Bool {
var hidden = self.presentationContext.combinedPrefersOnScreenNavigationHidden()
var hidden = false
if let navigationController = self._rootController as? NavigationController, let overlayController = navigationController.topOverlayController {
hidden = hidden || overlayController.prefersOnScreenNavigationHidden
}
hidden = hidden || self.presentationContext.combinedPrefersOnScreenNavigationHidden()
for controller in self.topLevelOverlayControllers {
if let controller = controller as? ViewController {