gpt4 book ai didi

ios - 仅当键盘快速出现时如何使scrollView滚动

转载 作者:行者123 更新时间:2023-12-01 19:38:37 25 4
gpt4 key购买 nike

我正在使用 scrollview 来查看高度为 1000 的 View ,最初我不希望我的 scrollView 滚动。如果我点击任何文本字段,那么我希望我的 ScrollView 滚动,如果我返回键盘,那么我不希望 ScrollView 滚动。

在这里,当键盘出现时,我可以向上显示文本字段,但是当我返回键盘时,我无法将文本字段返回到其原始位置,并且当我返回键盘时,我不希望我的 View 滚动,

请在代码中帮助我。

class ViewController: UIViewController, UITextFieldDelegate {

@IBOutlet weak var scrolView: UIScrollView!
@IBOutlet weak var upTFLD: UITextField!
var activeTextField = UITextField()

@IBOutlet weak var downTFLD: UITextField!
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view.
upTFLD.delegate = self
downTFLD.delegate = self

NotificationCenter.default.addObserver(self, selector: #selector(onKeyboardAppear(_:)), name: UIResponder.keyboardDidShowNotification, object: nil)
NotificationCenter.default.addObserver(self, selector: #selector(onKeyboardDisappear(_:)), name: UIResponder.keyboardDidHideNotification, object: nil)
}
@objc func onKeyboardAppear(_ notification: NSNotification) {

let info = notification.userInfo!
let rect: CGRect = info[UIResponder.keyboardFrameBeginUserInfoKey] as! CGRect
let kbSize = rect.size
let insets = UIEdgeInsets(top: 0, left: 0, bottom: kbSize.height+20, right: 0)
self.scrolView.contentInset = insets
self.scrolView.scrollIndicatorInsets = insets
var visibleRect: CGRect = self.scrolView.convert(self.scrolView.bounds, to: self.view)
visibleRect.size.height -= rect.size.height;
let inputRect: CGRect = self.activeTextField.convert(self.activeTextField.bounds, to: self.scrolView)
if (visibleRect.contains(inputRect)) {
self.scrolView.scrollRectToVisible(inputRect, animated: true)
}
}

@objc func onKeyboardDisappear(_ notification: NSNotification) {

self.scrolView.contentInset = UIEdgeInsets.zero
self.scrolView.scrollIndicatorInsets = UIEdgeInsets.zero
}

public func textFieldDidBeginEditing(_ textField: UITextField) {

activeTextField = textField
}
func textFieldShouldReturn(_ textField: UITextField) -> Bool {
activeTextField.resignFirstResponder()
return true
}
}

最初我不想滚动,如果我返回键盘,我需要文本字段回到原来的位置并且不再滚动。

只有键盘出现然后只有我需要滚动。请在代码中帮助我。

最佳答案

您只需要在键盘隐藏后立即设置 ScrollView 的 contentOffset。

创建一个变量来存储offsetBeforeShowKeyboard

var offsetBeforeShowKeyboard: CGFloat?

最初加载 View 时:
self.scrollView.isScrollEnabled = false

选择任何文本字段时:
public func textFieldDidBeginEditing(_ textField: UITextField) {
self.scrollView.isScrollEnabled = true
if (self.offsetBeforeShowKeyboard == nil) {
self.offsetBeforeShowKeyboard = self.scrollView.contentOffset
}
}

键盘隐藏时
 @objc func onKeyboardDisappear(_ notification: NSNotification) {
self.scrollView.isScrollEnabled = false
if let offset = self.offsetBeforeShowKeyboard {
self.scrolView.setContentOffset(offset, animated: true)
}
self.offsetBeforeShowKeyboard = nil
}

关于ios - 仅当键盘快速出现时如何使scrollView滚动,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58726082/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com