From b34f17452011b3b2b30ad239b323ff75a0b954cc Mon Sep 17 00:00:00 2001 From: Ilya Laktyushin Date: Mon, 22 Oct 2018 18:59:00 +0300 Subject: [PATCH] Fixed overlay presentation when keyboard window is about to be hidden or appears to remain on the screen when it actually doesn't. Added keyboard-awareness to tab bar on iPad. --- Display/GlobalOverlayPresentationContext.swift | 8 ++++++-- Display/TabBarContollerNode.swift | 6 +++++- 2 files changed, 11 insertions(+), 3 deletions(-) diff --git a/Display/GlobalOverlayPresentationContext.swift b/Display/GlobalOverlayPresentationContext.swift index 6ae8082f40..75eafc370c 100644 --- a/Display/GlobalOverlayPresentationContext.swift +++ b/Display/GlobalOverlayPresentationContext.swift @@ -2,7 +2,7 @@ import Foundation import AsyncDisplayKit import SwiftSignalKit -private func isViewVisibleInHierarchy(_ view: UIView) -> Bool { +private func isViewVisibleInHierarchy(_ view: UIView, _ initial: Bool = true) -> Bool { guard let window = view.window else { return false } @@ -12,7 +12,11 @@ private func isViewVisibleInHierarchy(_ view: UIView) -> Bool { if view.superview === window { return true } else if let superview = view.superview { - return isViewVisibleInHierarchy(superview) + if initial && view.frame.minY >= superview.frame.height { + return false + } else { + return isViewVisibleInHierarchy(superview, false) + } } else { return false } diff --git a/Display/TabBarContollerNode.swift b/Display/TabBarContollerNode.swift index b34cf744f6..2b240c3b2d 100644 --- a/Display/TabBarContollerNode.swift +++ b/Display/TabBarContollerNode.swift @@ -36,7 +36,7 @@ final class TabBarControllerNode: ASDisplayNode { func containerLayoutUpdated(_ layout: ContainerViewLayout, transition: ContainedViewLayoutTransition) { let update = { - let tabBarHeight: CGFloat + var tabBarHeight: CGFloat let bottomInset: CGFloat = layout.insets(options: []).bottom if !layout.safeInsets.left.isZero { tabBarHeight = 34.0 + bottomInset @@ -44,6 +44,10 @@ final class TabBarControllerNode: ASDisplayNode { tabBarHeight = 49.0 + bottomInset } + if let inputHeight = layout.inputHeight, layout.metrics.widthClass == .regular { + tabBarHeight += inputHeight + } + transition.updateFrame(node: self.tabBarNode, frame: CGRect(origin: CGPoint(x: 0.0, y: layout.size.height - tabBarHeight), size: CGSize(width: layout.size.width, height: tabBarHeight))) self.tabBarNode.updateLayout(size: layout.size, leftInset: layout.safeInsets.left, rightInset: layout.safeInsets.right, bottomInset: bottomInset, transition: transition) }