diff --git a/submodules/Display/Display/Navigation/NavigationController.swift b/submodules/Display/Display/Navigation/NavigationController.swift index 24890663da..959fc71b99 100644 --- a/submodules/Display/Display/Navigation/NavigationController.swift +++ b/submodules/Display/Display/Navigation/NavigationController.swift @@ -532,6 +532,7 @@ open class NavigationController: UINavigationController, ContainableController, var previousModalContainer: NavigationModalContainer? var visibleModalCount = 0 + var hasVisibleStandaloneModal = false var topModalDismissProgress: CGFloat = 0.0 for i in (0 ..< navigationLayout.modal.count).reversed() { @@ -577,9 +578,13 @@ open class NavigationController: UINavigationController, ContainableController, } if modalContainer.supernode != nil { - if !isStandaloneModal || visibleModalCount != 0 { + if !hasVisibleStandaloneModal && !isStandaloneModal { visibleModalCount += 1 } + if isStandaloneModal { + hasVisibleStandaloneModal = true + visibleModalCount = 0 + } if previousModalContainer == nil { topModalDismissProgress = modalContainer.dismissProgress if case .compact = layout.metrics.widthClass { diff --git a/submodules/Display/Display/Navigation/NavigationModalContainer.swift b/submodules/Display/Display/Navigation/NavigationModalContainer.swift index 1b4d433e8e..87f3464f4e 100644 --- a/submodules/Display/Display/Navigation/NavigationModalContainer.swift +++ b/submodules/Display/Display/Navigation/NavigationModalContainer.swift @@ -334,20 +334,25 @@ final class NavigationModalContainer: ASDisplayNode, UIScrollViewDelegate, UIGes var topInset: CGFloat if isStandaloneModal { topInset = 0.0 + containerLayout = layout + + let unscaledFrame = CGRect(origin: CGPoint(x: 0.0, y: 0.0), size: containerLayout.size) + containerScale = 1.0 + containerFrame = unscaledFrame } else { topInset = 10.0 if let statusBarHeight = layout.statusBarHeight { topInset += statusBarHeight } + + containerLayout = ContainerViewLayout(size: CGSize(width: layout.size.width, height: layout.size.height - topInset), metrics: layout.metrics, deviceMetrics: layout.deviceMetrics, intrinsicInsets: UIEdgeInsets(top: 0.0, left: layout.intrinsicInsets.left, bottom: layout.intrinsicInsets.bottom, right: layout.intrinsicInsets.right), safeInsets: UIEdgeInsets(top: 0.0, left: layout.safeInsets.left, bottom: layout.safeInsets.bottom, right: layout.safeInsets.right), statusBarHeight: nil, inputHeight: layout.inputHeight, inputHeightIsInteractivellyChanging: layout.inputHeightIsInteractivellyChanging, inVoiceOver: layout.inVoiceOver) + let unscaledFrame = CGRect(origin: CGPoint(x: 0.0, y: topInset - coveredByModalTransition * 10.0), size: containerLayout.size) + let maxScale: CGFloat = (containerLayout.size.width - 16.0 * 2.0) / containerLayout.size.width + containerScale = 1.0 * (1.0 - coveredByModalTransition) + maxScale * coveredByModalTransition + let maxScaledTopInset: CGFloat = topInset - 10.0 + let scaledTopInset: CGFloat = topInset * (1.0 - coveredByModalTransition) + maxScaledTopInset * coveredByModalTransition + containerFrame = unscaledFrame.offsetBy(dx: 0.0, dy: scaledTopInset - (unscaledFrame.midY - containerScale * unscaledFrame.height / 2.0)) } - - containerLayout = ContainerViewLayout(size: CGSize(width: layout.size.width, height: layout.size.height - topInset), metrics: layout.metrics, deviceMetrics: layout.deviceMetrics, intrinsicInsets: UIEdgeInsets(top: 0.0, left: layout.intrinsicInsets.left, bottom: layout.intrinsicInsets.bottom, right: layout.intrinsicInsets.right), safeInsets: UIEdgeInsets(top: 0.0, left: layout.safeInsets.left, bottom: layout.safeInsets.bottom, right: layout.safeInsets.right), statusBarHeight: nil, inputHeight: layout.inputHeight, inputHeightIsInteractivellyChanging: layout.inputHeightIsInteractivellyChanging, inVoiceOver: layout.inVoiceOver) - let unscaledFrame = CGRect(origin: CGPoint(x: 0.0, y: topInset - coveredByModalTransition * 10.0), size: containerLayout.size) - let maxScale: CGFloat = (containerLayout.size.width - 16.0 * 2.0) / containerLayout.size.width - containerScale = 1.0 * (1.0 - coveredByModalTransition) + maxScale * coveredByModalTransition - let maxScaledTopInset: CGFloat = topInset - 10.0 - let scaledTopInset: CGFloat = topInset * (1.0 - coveredByModalTransition) + maxScaledTopInset * coveredByModalTransition - containerFrame = unscaledFrame.offsetBy(dx: 0.0, dy: scaledTopInset - (unscaledFrame.midY - containerScale * unscaledFrame.height / 2.0)) case .regular: self.panRecognizer?.isEnabled = false self.dim.backgroundColor = UIColor(white: 0.0, alpha: 0.4) diff --git a/submodules/TelegramUI/TelegramUI/ChatController.swift b/submodules/TelegramUI/TelegramUI/ChatController.swift index 2fb48cc767..f64d8fe31a 100644 --- a/submodules/TelegramUI/TelegramUI/ChatController.swift +++ b/submodules/TelegramUI/TelegramUI/ChatController.swift @@ -4488,6 +4488,17 @@ public final class ChatControllerImpl: TelegramBaseController, ChatController, G print() } + switch self.presentationInterfaceState.mode { + case .standard, .inline: + break + case .overlay: + if layout.safeInsets.top.isZero { + self.statusBar.statusBarStyle = .Hide + } else { + self.statusBar.statusBarStyle = .Ignore + } + } + self.chatDisplayNode.containerLayoutUpdated(layout, navigationBarHeight: self.navigationHeight, transition: transition, listViewTransaction: { updateSizeAndInsets, additionalScrollDistance, scrollToTop, completion in self.chatDisplayNode.historyNode.updateLayout(transition: transition, updateSizeAndInsets: updateSizeAndInsets, additionalScrollDistance: additionalScrollDistance, scrollToTop: scrollToTop, completion: completion) }) @@ -4823,7 +4834,6 @@ public final class ChatControllerImpl: TelegramBaseController, ChatController, G self.statusBar.statusBarStyle = self.presentationData.theme.rootController.statusBarStyle.style self.deferScreenEdgeGestures = [] case .overlay: - self.statusBar.statusBarStyle = .Hide self.deferScreenEdgeGestures = [.top] case .inline: self.statusBar.statusBarStyle = .Ignore