mirror of
https://github.com/Swiftgram/Telegram-iOS.git
synced 2025-06-16 05:55:20 +00:00
Fix async quote positioning
This commit is contained in:
parent
5c0851bb15
commit
6fab49a229
@ -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:
|
||||
|
@ -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
|
||||
|
Loading…
x
Reference in New Issue
Block a user