Fixed chat message menu presentation

This commit is contained in:
Ilya Laktyushin 2019-07-20 00:30:23 +02:00
parent fb3eeaa323
commit bb44184bd3
3 changed files with 25 additions and 5 deletions

View File

@ -272,7 +272,7 @@ open class NavigationController: UINavigationController, ContainableController,
return (CGRect(origin: CGPoint(), size: detailFrame.size), ContainerViewLayout(size: CGSize(width: detailWidth, height: layout.size.height), metrics: LayoutMetrics(widthClass: .regular, heightClass: .regular), intrinsicInsets: layout.intrinsicInsets, safeInsets: layout.safeInsets, statusBarHeight: layout.statusBarHeight, inputHeight: layout.inputHeight, standardInputHeight: layout.standardInputHeight, inputHeightIsInteractivellyChanging: layout.inputHeightIsInteractivellyChanging, inVoiceOver: layout.inVoiceOver))
}
case .single:
return (CGRect(origin: CGPoint(), size: CGSize(width: layout.size.width, height: layout.size.height)), ContainerViewLayout(size: CGSize(width: layout.size.width, height: layout.size.height), metrics: LayoutMetrics(widthClass: .compact, heightClass: .compact), intrinsicInsets: layout.intrinsicInsets, safeInsets: layout.safeInsets, statusBarHeight: layout.statusBarHeight, inputHeight: layout.inputHeight, standardInputHeight: layout.standardInputHeight, inputHeightIsInteractivellyChanging: layout.inputHeightIsInteractivellyChanging, inVoiceOver: layout.inVoiceOver))
return (CGRect(origin: CGPoint(), size: CGSize(width: layout.size.width, height: layout.size.height)), ContainerViewLayout(size: CGSize(width: layout.size.width, height: layout.size.height), metrics: LayoutMetrics(widthClass: .compact, heightClass: layout.size.height > 900.0 ? .regular : .compact), intrinsicInsets: layout.intrinsicInsets, safeInsets: layout.safeInsets, statusBarHeight: layout.statusBarHeight, inputHeight: layout.inputHeight, standardInputHeight: layout.standardInputHeight, inputHeightIsInteractivellyChanging: layout.inputHeightIsInteractivellyChanging, inVoiceOver: layout.inVoiceOver))
}
}

View File

@ -1815,8 +1815,16 @@ class ChatControllerNode: ASDisplayNode, UIScrollViewDelegate {
}, associatedController: contextMenuController)
self.messageActionSheetController = (controller, stableId)
self.accessibilityElementsHidden = true
if let sheetActions = sheetActions, !sheetActions.isEmpty {
self.controllerInteraction.presentGlobalOverlayController(controller, nil)
if let sheetActions = sheetActions, !sheetActions.isEmpty, let (layout, _) = self.validLayout {
var isSlideOver = false
if case .compact = layout.metrics.widthClass, case .regular = layout.metrics.heightClass {
isSlideOver = true
}
if isSlideOver {
self.controllerInteraction.presentController(controller, nil)
} else {
self.controllerInteraction.presentGlobalOverlayController(controller, nil)
}
}
animateIn = true
}

View File

@ -170,6 +170,11 @@ final class ChatMessageActionSheetControllerNode: ViewControllerTracingNode {
horizontalOffset += UIScreenPixel
}
var isSlideOver = false
if case .compact = layout.metrics.widthClass, case .regular = layout.metrics.heightClass {
isSlideOver = true
}
transition.updateFrame(node: self.sideDimNode, frame: CGRect(origin: CGPoint(x: 0.0, y: 0.0), size: CGSize(width: max(0.0, horizontalOffset), height: max(0.0, layout.size.height - inputHeight))))
transition.updateFrame(node: self.sideInputDimNode, frame: CGRect(origin: CGPoint(x: 0.0, y: layout.size.height - inputHeight), size: CGSize(width: max(0.0, horizontalOrigin), height: max(0.0, inputHeight))))
transition.updateFrame(node: self.inputDimNode, frame: CGRect(origin: CGPoint(x: horizontalOrigin, y: layout.size.height - inputHeight), size: CGSize(width: layout.size.width, height: inputHeight)))
@ -185,12 +190,19 @@ final class ChatMessageActionSheetControllerNode: ViewControllerTracingNode {
itemsHeight += actionNode.bounds.height
}
let containerFrame = CGRect(origin: CGPoint(x: horizontalOrigin + floor((layout.size.width - containerWidth) / 2.0), y: layout.size.height - height - itemsHeight - inputHeight), size: CGSize(width: containerWidth, height: itemsHeight))
var containerFrame = CGRect(origin: CGPoint(x: horizontalOrigin + floor((layout.size.width - containerWidth) / 2.0), y: layout.size.height - height - itemsHeight), size: CGSize(width: containerWidth, height: itemsHeight))
if isSlideOver {
containerFrame = containerFrame.offsetBy(dx: 0.0, dy: -inputHeight)
}
transition.updateFrame(node: self.itemsContainerNode, frame: containerFrame)
transition.updateFrame(node: self.itemsShadowNode, frame: containerFrame.insetBy(dx: -shadowInset, dy: -shadowInset))
height += itemsHeight
height += inputHeight
if isSlideOver {
height += inputHeight
}
height += 6.0
return height