mirror of
https://github.com/Swiftgram/Telegram-iOS.git
synced 2025-12-22 14:20:20 +00:00
UI improvements
This commit is contained in:
@@ -154,6 +154,7 @@ open class NavigationController: UINavigationController, ContainableController,
|
||||
private var overlayContainers: [NavigationOverlayContainer] = []
|
||||
|
||||
private var globalOverlayContainers: [NavigationOverlayContainer] = []
|
||||
private var globalOverlayBelowKeyboardContainerParent: GlobalOverlayContainerParent?
|
||||
private var globalOverlayContainerParent: GlobalOverlayContainerParent?
|
||||
public var globalOverlayControllersUpdated: (() -> Void)?
|
||||
|
||||
@@ -351,7 +352,7 @@ open class NavigationController: UINavigationController, ContainableController,
|
||||
|
||||
private var isUpdatingContainers: Bool = false
|
||||
|
||||
private func updateContainersNonReentrant(transition: ContainedViewLayoutTransition) {
|
||||
func updateContainersNonReentrant(transition: ContainedViewLayoutTransition) {
|
||||
if self.isUpdatingContainers {
|
||||
return
|
||||
}
|
||||
@@ -375,7 +376,18 @@ open class NavigationController: UINavigationController, ContainableController,
|
||||
|
||||
let initialPrefersOnScreenNavigationHidden = self.collectPrefersOnScreenNavigationHidden()
|
||||
|
||||
var overlayLayout = layout
|
||||
let belowKeyboardOverlayLayout = layout
|
||||
var globalOverlayLayout = layout
|
||||
|
||||
if let globalOverlayBelowKeyboardContainerParent = self.globalOverlayBelowKeyboardContainerParent {
|
||||
if globalOverlayBelowKeyboardContainerParent.view.superview != self.displayNode.view {
|
||||
self.displayNode.addSubnode(globalOverlayBelowKeyboardContainerParent)
|
||||
}
|
||||
|
||||
/*overlayLayout.size.height = overlayLayout.size.height - (layout.inputHeight ?? 0.0)
|
||||
overlayLayout.inputHeight = nil
|
||||
overlayLayout.inputHeightIsInteractivellyChanging = false*/
|
||||
}
|
||||
|
||||
if let globalOverlayContainerParent = self.globalOverlayContainerParent {
|
||||
let portraitSize = CGSize(width: min(layout.size.width, layout.size.height), height: max(layout.size.width, layout.size.height))
|
||||
@@ -386,9 +398,9 @@ open class NavigationController: UINavigationController, ContainableController,
|
||||
self.displayNode.addSubnode(globalOverlayContainerParent)
|
||||
}
|
||||
|
||||
overlayLayout.size.height = overlayLayout.size.height - (layout.inputHeight ?? 0.0)
|
||||
overlayLayout.inputHeight = nil
|
||||
overlayLayout.inputHeightIsInteractivellyChanging = false
|
||||
globalOverlayLayout.size.height = globalOverlayLayout.size.height - (layout.inputHeight ?? 0.0)
|
||||
globalOverlayLayout.inputHeight = nil
|
||||
globalOverlayLayout.inputHeightIsInteractivellyChanging = false
|
||||
} else if layout.inputHeight == nil {
|
||||
if globalOverlayContainerParent.view.superview != self.displayNode.view {
|
||||
self.displayNode.addSubnode(globalOverlayContainerParent)
|
||||
@@ -438,6 +450,9 @@ open class NavigationController: UINavigationController, ContainableController,
|
||||
}
|
||||
}
|
||||
|
||||
if let globalOverlayBelowKeyboardContainerParent = self.globalOverlayBelowKeyboardContainerParent {
|
||||
transition.updateFrame(node: globalOverlayBelowKeyboardContainerParent, frame: CGRect(origin: CGPoint(), size: layout.size))
|
||||
}
|
||||
if let globalOverlayContainerParent = self.globalOverlayContainerParent {
|
||||
transition.updateFrame(node: globalOverlayContainerParent, frame: CGRect(origin: CGPoint(), size: layout.size))
|
||||
}
|
||||
@@ -525,6 +540,7 @@ open class NavigationController: UINavigationController, ContainableController,
|
||||
var additionalSideInsets = UIEdgeInsets()
|
||||
|
||||
var modalStyleOverlayTransitionFactor: CGFloat = 0.0
|
||||
var previousGlobalOverlayBelowKeyboardContainer: NavigationOverlayContainer?
|
||||
var previousGlobalOverlayContainer: NavigationOverlayContainer?
|
||||
for i in (0 ..< self.globalOverlayContainers.count).reversed() {
|
||||
let overlayContainer = self.globalOverlayContainers[i]
|
||||
@@ -536,26 +552,61 @@ open class NavigationController: UINavigationController, ContainableController,
|
||||
containerTransition = transition
|
||||
}
|
||||
|
||||
let overlayWantsToBeBelowKeyboard = overlayContainer.controller.overlayWantsToBeBelowKeyboard
|
||||
let overlayLayout: ContainerViewLayout
|
||||
if overlayWantsToBeBelowKeyboard {
|
||||
overlayLayout = belowKeyboardOverlayLayout
|
||||
} else {
|
||||
overlayLayout = globalOverlayLayout
|
||||
}
|
||||
|
||||
containerTransition.updateFrame(node: overlayContainer, frame: CGRect(origin: CGPoint(), size: overlayLayout.size))
|
||||
overlayContainer.update(layout: overlayLayout, transition: containerTransition)
|
||||
|
||||
modalStyleOverlayTransitionFactor = max(modalStyleOverlayTransitionFactor, overlayContainer.controller.modalStyleOverlayTransitionFactor)
|
||||
|
||||
if overlayContainer.supernode == nil && overlayContainer.isReady {
|
||||
if let previousGlobalOverlayContainer = previousGlobalOverlayContainer {
|
||||
self.globalOverlayContainerParent?.insertSubnode(overlayContainer, belowSubnode: previousGlobalOverlayContainer)
|
||||
if overlayContainer.isReady {
|
||||
let wasNotAdded = overlayContainer.supernode == nil
|
||||
|
||||
if overlayWantsToBeBelowKeyboard {
|
||||
if overlayContainer.supernode !== self.globalOverlayBelowKeyboardContainerParent {
|
||||
if let previousGlobalOverlayBelowKeyboardContainer = previousGlobalOverlayBelowKeyboardContainer {
|
||||
self.globalOverlayBelowKeyboardContainerParent?.insertSubnode(overlayContainer, belowSubnode: previousGlobalOverlayBelowKeyboardContainer)
|
||||
} else {
|
||||
self.globalOverlayBelowKeyboardContainerParent?.addSubnode(overlayContainer)
|
||||
}
|
||||
}
|
||||
} else {
|
||||
self.globalOverlayContainerParent?.addSubnode(overlayContainer)
|
||||
if overlayContainer.supernode !== self.globalOverlayContainerParent {
|
||||
if let previousGlobalOverlayContainer = previousGlobalOverlayContainer {
|
||||
self.globalOverlayContainerParent?.insertSubnode(overlayContainer, belowSubnode: previousGlobalOverlayContainer)
|
||||
} else {
|
||||
self.globalOverlayContainerParent?.addSubnode(overlayContainer)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if wasNotAdded {
|
||||
overlayContainer.transitionIn()
|
||||
notifyGlobalOverlayControllersUpdated = true
|
||||
overlayContainer.controller.internalOverlayWantsToBeBelowKeyboardUpdated = { [weak self] transition in
|
||||
guard let strongSelf = self else {
|
||||
return
|
||||
}
|
||||
strongSelf.updateContainersNonReentrant(transition: transition)
|
||||
}
|
||||
}
|
||||
overlayContainer.transitionIn()
|
||||
notifyGlobalOverlayControllersUpdated = true
|
||||
}
|
||||
|
||||
let controllerAdditionalSideInsets = overlayContainer.controller.additionalSideInsets
|
||||
additionalSideInsets = UIEdgeInsets(top: 0.0, left: max(additionalSideInsets.left, controllerAdditionalSideInsets.left), bottom: 0.0, right: max(additionalSideInsets.right, controllerAdditionalSideInsets.right))
|
||||
|
||||
if overlayContainer.supernode != nil {
|
||||
previousGlobalOverlayContainer = overlayContainer
|
||||
if overlayContainer.controller.overlayWantsToBeBelowKeyboard {
|
||||
previousGlobalOverlayBelowKeyboardContainer = overlayContainer
|
||||
} else {
|
||||
previousGlobalOverlayContainer = overlayContainer
|
||||
}
|
||||
let controllerStatusBarStyle = overlayContainer.controller.statusBar.statusBarStyle
|
||||
switch controllerStatusBarStyle {
|
||||
case .Black, .White, .Hide:
|
||||
@@ -594,6 +645,8 @@ open class NavigationController: UINavigationController, ContainableController,
|
||||
self.displayNode.insertSubnode(overlayContainer, belowSubnode: previousOverlayContainer)
|
||||
} else if let globalScrollToTopNode = self.globalScrollToTopNode {
|
||||
self.displayNode.insertSubnode(overlayContainer, belowSubnode: globalScrollToTopNode)
|
||||
} else if let globalOverlayBelowKeyboardContainerParent = self.globalOverlayBelowKeyboardContainerParent {
|
||||
self.displayNode.insertSubnode(overlayContainer, belowSubnode: globalOverlayBelowKeyboardContainerParent)
|
||||
} else if let globalOverlayContainerParent = self.globalOverlayContainerParent {
|
||||
self.displayNode.insertSubnode(overlayContainer, belowSubnode: globalOverlayContainerParent)
|
||||
} else {
|
||||
@@ -674,7 +727,7 @@ open class NavigationController: UINavigationController, ContainableController,
|
||||
}
|
||||
|
||||
containerTransition.updateFrame(node: modalContainer, frame: CGRect(origin: CGPoint(), size: layout.size))
|
||||
modalContainer.update(layout: modalContainer.isFlat ? overlayLayout : layout, controllers: navigationLayout.modal[i].controllers, coveredByModalTransition: effectiveModalTransition, transition: containerTransition)
|
||||
modalContainer.update(layout: modalContainer.isFlat ? globalOverlayLayout : layout, controllers: navigationLayout.modal[i].controllers, coveredByModalTransition: effectiveModalTransition, transition: containerTransition)
|
||||
|
||||
if modalContainer.supernode == nil && modalContainer.isReady {
|
||||
if let previousModalContainer = previousModalContainer {
|
||||
@@ -1228,6 +1281,10 @@ open class NavigationController: UINavigationController, ContainableController,
|
||||
self.displayNode.addSubnode(globalScrollToTopNode)
|
||||
self.globalScrollToTopNode = globalScrollToTopNode
|
||||
|
||||
let globalOverlayBelowKeyboardContainerParent = GlobalOverlayContainerParent()
|
||||
self.displayNode.addSubnode(globalOverlayBelowKeyboardContainerParent)
|
||||
self.globalOverlayBelowKeyboardContainerParent = globalOverlayBelowKeyboardContainerParent
|
||||
|
||||
let globalOverlayContainerParent = GlobalOverlayContainerParent()
|
||||
self.displayNode.addSubnode(globalOverlayContainerParent)
|
||||
self.globalOverlayContainerParent = globalOverlayContainerParent
|
||||
|
||||
Reference in New Issue
Block a user