Fix weird search bar text field autoscrolling

This commit is contained in:
Ilya Laktyushin 2020-09-29 04:22:34 +04:00
parent 8b362c60f4
commit 7fb0b48ded

View File

@ -255,11 +255,12 @@ private class SearchBarTextField: UITextField, UIScrollViewDelegate {
strongSelf.selectedTokenIndex = i
if !strongSelf.isFirstResponder {
let _ = strongSelf.becomeFirstResponder()
}
} else {
let newPosition = strongSelf.beginningOfDocument
strongSelf.selectedTextRange = strongSelf.textRange(from: newPosition, to: newPosition)
}
}
}
let isSelected = i == self.selectedTokenIndex
if i < self.tokens.count - 1 && isSelected {
hasSelected = true
@ -358,7 +359,9 @@ private class SearchBarTextField: UITextField, UIScrollViewDelegate {
self.tokenContainerNode.frame = CGRect(origin: self.tokenContainerNode.frame.origin, size: CGSize(width: self.tokensWidth, height: self.bounds.height))
if let scrollView = self.scrollView {
if scrollView.contentInset.left != leftOffset {
scrollView.contentInset = UIEdgeInsets(top: 0.0, left: leftOffset, bottom: 0.0, right: 0.0)
}
if leftOffset.isZero {
scrollView.contentOffset = CGPoint()
} else if self.tokensWidth != previousTokensWidth {
@ -441,14 +444,22 @@ private class SearchBarTextField: UITextField, UIScrollViewDelegate {
return nil
}
var fixAutoScroll: CGPoint?
func scrollViewDidScroll(_ scrollView: UIScrollView) {
if let fixAutoScroll = self.fixAutoScroll {
self.scrollView?.setContentOffset(fixAutoScroll, animated: true)
self.scrollView?.setContentOffset(fixAutoScroll, animated: false)
self.fixAutoScroll = nil
} else {
self.updateTokenContainerPosition()
}
}
override func becomeFirstResponder() -> Bool {
if let contentOffset = self.scrollView?.contentOffset {
Queue.mainQueue().after(0.03) {
self.scrollView?.setContentOffset(contentOffset, animated: true)
self.fixAutoScroll = contentOffset
Queue.mainQueue().after(0.1) {
self.fixAutoScroll = nil
}
}
return super.becomeFirstResponder()