Fix video message layout when minimized container is present

This commit is contained in:
Ilya Laktyushin 2024-07-27 01:21:33 +02:00
parent 9df433937e
commit 60196075a6
3 changed files with 19 additions and 8 deletions

View File

@ -90,6 +90,10 @@ public struct ContainerViewLayout: Equatable {
return ContainerViewLayout(size: self.size, metrics: self.metrics, deviceMetrics: self.deviceMetrics, intrinsicInsets: intrinsicInsets, safeInsets: self.safeInsets, additionalInsets: self.additionalInsets, statusBarHeight: self.statusBarHeight, inputHeight: self.inputHeight, inputHeightIsInteractivellyChanging: self.inputHeightIsInteractivellyChanging, inVoiceOver: self.inVoiceOver)
}
public func withUpdatedAdditionalInsets(_ additionalInsets: UIEdgeInsets) -> ContainerViewLayout {
return ContainerViewLayout(size: self.size, metrics: self.metrics, deviceMetrics: self.deviceMetrics, intrinsicInsets: self.intrinsicInsets, safeInsets: self.safeInsets, additionalInsets: additionalInsets, statusBarHeight: self.statusBarHeight, inputHeight: self.inputHeight, inputHeightIsInteractivellyChanging: self.inputHeightIsInteractivellyChanging, inVoiceOver: self.inVoiceOver)
}
public func withUpdatedInputHeight(_ inputHeight: CGFloat?) -> ContainerViewLayout {
return ContainerViewLayout(size: self.size, metrics: self.metrics, deviceMetrics: self.deviceMetrics, intrinsicInsets: self.intrinsicInsets, safeInsets: self.safeInsets, additionalInsets: self.additionalInsets, statusBarHeight: self.statusBarHeight, inputHeight: inputHeight, inputHeightIsInteractivellyChanging: self.inputHeightIsInteractivellyChanging, inVoiceOver: self.inVoiceOver)
}

View File

@ -443,7 +443,20 @@ open class NavigationController: UINavigationController, ContainableController,
globalScrollToTopNode.frame = CGRect(origin: CGPoint(x: 0.0, y: -1.0), size: CGSize(width: layout.size.width, height: 1.0))
}
let overlayContainerLayout = layout
var overlayContainerLayout = layout
var updatedSize = layout.size
var updatedIntrinsicInsets = layout.intrinsicInsets
var updatedAdditionalInsets = layout.additionalInsets
if let minimizedContainer = self.minimizedContainer {
if (layout.inputHeight ?? 0.0).isZero {
let minimizedContainerHeight = minimizedContainer.collapsedHeight(layout: layout)
updatedSize.height -= minimizedContainerHeight
updatedIntrinsicInsets.bottom = 0.0
updatedAdditionalInsets.bottom += minimizedContainerHeight
}
}
overlayContainerLayout = overlayContainerLayout.withUpdatedAdditionalInsets(updatedAdditionalInsets)
if let inCallStatusBar = self.inCallStatusBar {
let isLandscape = layout.size.width > layout.size.height
@ -843,8 +856,6 @@ open class NavigationController: UINavigationController, ContainableController,
layout.additionalInsets.left = max(layout.intrinsicInsets.left, additionalSideInsets.left)
layout.additionalInsets.right = max(layout.intrinsicInsets.right, additionalSideInsets.right)
var updatedSize = layout.size
var updatedIntrinsicInsets = layout.intrinsicInsets
if case .flat = navigationLayout.root, let minimizedContainer = self.minimizedContainer {
if minimizedContainer.supernode !== self.displayNode {
if let rootContainer = self.rootContainer, case let .flat(flatContainer) = rootContainer {
@ -857,10 +868,6 @@ open class NavigationController: UINavigationController, ContainableController,
self.displayNode.insertSubnode(minimizedContainer, at: 0)
}
}
if (layout.inputHeight ?? 0.0).isZero {
updatedSize.height -= minimizedContainer.collapsedHeight(layout: layout)
updatedIntrinsicInsets.bottom = 0.0
}
}
switch navigationLayout.root {

View File

@ -1389,7 +1389,7 @@ public class VideoMessageCameraScreen: ViewController {
}
var backgroundFrame = CGRect(origin: .zero, size: CGSize(width: layout.size.width, height: controller.inputPanelFrame.0.minY))
if backgroundFrame.maxY < layout.size.height - 100.0 && (layout.inputHeight ?? 0.0).isZero && !controller.inputPanelFrame.1 {
if backgroundFrame.maxY < layout.size.height - 100.0 && (layout.inputHeight ?? 0.0).isZero && !controller.inputPanelFrame.1 && layout.additionalInsets.bottom.isZero {
backgroundFrame = CGRect(origin: .zero, size: CGSize(width: layout.size.width, height: layout.size.height - layout.intrinsicInsets.bottom - controller.inputPanelFrame.0.height))
}