Fix async quote positioning

This commit is contained in:
Ali 2023-10-25 22:22:45 +04:00
parent 5c0851bb15
commit 6fab49a229
2 changed files with 18 additions and 12 deletions

View File

@ -2953,9 +2953,6 @@ open class ListView: ASDisplayNode, UIScrollViewAccessibilityDelegate, UIGesture
offset = (self.visibleSize.height - insets.bottom) - itemNode.apparentFrame.maxY + itemNode.insets.top
offset += overflow
offset -= floor((self.visibleSize.height - insets.bottom - insets.top) * 0.5)
//offset += 100.0
//offset = (self.visibleSize.height - insets.bottom) - itemNode.apparentFrame.maxY + getOverflow(itemNode)
}
}
case .visible:

View File

@ -240,12 +240,12 @@ struct PendingNode {
}
enum ListViewStateNode {
case Node(index: Int, frame: CGRect, referenceNode: QueueLocalObject<ListViewItemNode>?)
case Node(index: Int, frame: CGRect, referenceNode: QueueLocalObject<ListViewItemNode>?, newNode: QueueLocalObject<ListViewItemNode>?)
case Placeholder(frame: CGRect)
var index: Int? {
switch self {
case .Node(let index, _, _):
case let .Node(index, _, _, _):
return index
case .Placeholder(_):
return nil
@ -255,15 +255,15 @@ enum ListViewStateNode {
var frame: CGRect {
get {
switch self {
case .Node(_, let frame, _):
case let .Node(_, frame, _, _):
return frame
case .Placeholder(let frame):
return frame
}
} set(value) {
switch self {
case let .Node(index, _, referenceNode):
self = .Node(index: index, frame: value, referenceNode: referenceNode)
case let .Node(index, _, referenceNode, newNode):
self = .Node(index: index, frame: value, referenceNode: referenceNode, newNode: newNode)
case .Placeholder(_):
self = .Placeholder(frame: value)
}
@ -313,7 +313,7 @@ struct ListViewState {
if let (fixedIndex, fixedPosition) = self.scrollPosition {
for node in self.nodes {
if let index = node.index, index == fixedIndex {
let offset: CGFloat
var offset: CGFloat
switch fixedPosition {
case let .bottom(additionalOffset):
offset = (self.visibleSize.height - self.insets.bottom) - node.frame.maxY + additionalOffset
@ -327,8 +327,17 @@ struct ListViewState {
switch overflow {
case .top:
offset = self.insets.top - node.frame.minY
case .bottom, .custom:
case .bottom:
offset = (self.visibleSize.height - self.insets.bottom) - node.frame.maxY
case let .custom(getOverflow):
if Thread.isMainThread, case let .Node(_, _, referenceNode, newNode) = node, let listNode = referenceNode?.syncWith({ $0 }) ?? newNode?.syncWith({ $0 }) {
let overflow = getOverflow(listNode)
offset = (self.visibleSize.height - self.insets.bottom) - node.frame.maxY
offset += overflow
offset -= floor((self.visibleSize.height - self.insets.bottom - self.insets.top) * 0.5)
} else {
offset = self.insets.top - node.frame.minY
}
}
}
case .visible:
@ -741,7 +750,7 @@ struct ListViewState {
let nodeFrame = CGRect(origin: nodeOrigin, size: CGSize(width: layout.size.width, height: animated ? 0.0 : layout.size.height))
operations.append(.InsertNode(index: insertionIndex, offsetDirection: offsetDirection, animated: animated, node: node, layout: layout, apply: apply))
self.nodes.insert(.Node(index: itemIndex, frame: nodeFrame, referenceNode: nil), at: insertionIndex)
self.nodes.insert(.Node(index: itemIndex, frame: nodeFrame, referenceNode: nil, newNode: node), at: insertionIndex)
if !animated {
switch offsetDirection {
@ -786,7 +795,7 @@ struct ListViewState {
mutating func removeNodeAtIndex(_ index: Int, direction: ListViewItemOperationDirectionHint?, animated: Bool, operations: inout [ListViewStateOperation]) {
let node = self.nodes[index]
if case let .Node(_, _, referenceNode) = node {
if case let .Node(_, _, referenceNode, _) = node {
let nodeFrame = node.frame
self.nodes.remove(at: index)
let offsetDirection: ListViewInsertionOffsetDirection