键盘快速出现时文本视图向上
Posted
技术标签:
【中文标题】键盘快速出现时文本视图向上【英文标题】:Text view up when keyboard appears swift 【发布时间】:2020-10-17 00:39:19 【问题描述】:我在表格中有 textField 和 textView。编辑 textFiled 时,此代码有效,所有文本字段均位于键盘上方。当我编辑 textView 时,什么也没有发生。这将有助于编辑代码,以便 textView 也可以使用此代码。请不要提供第三方库。谢谢
override func viewWillAppear(_ animated: Bool)
super.viewWillAppear(animated)
NotificationCenter.default.addObserver(
self,
selector: #selector(keyboardWillShow(_:)),
name: UIResponder.keyboardWillShowNotification,
object: nil)
NotificationCenter.default.addObserver(
self,
selector: #selector(keyboardWillHide(_:)),
name: UIResponder.keyboardWillHideNotification,
object: nil)
override func viewWillDisappear(_ animated: Bool)
super.viewWillDisappear(animated)
NotificationCenter.default.removeObserver(self)
override func viewDidLoad()
super.viewDidLoad()
@objc
fileprivate func keyboardWillShow(_ notification: Notification)
let keyboardFrame = ((notification as NSNotification).userInfo?[UIResponder.keyboardFrameEndUserInfoKey] as? NSValue)?.cgRectValue ?? CGRect.zero
let contentInsets = UIEdgeInsets(top: 0.0, left: 0.0, bottom: keyboardFrame.height, right: 0.0)
self.tableView.contentInset = contentInsets
self.tableView.scrollIndicatorInsets = contentInsets
UIView.animate(withDuration: 0.25)
self.tableView.layoutIfNeeded()
self.view.layoutIfNeeded()
@objc
fileprivate func keyboardWillHide(_ notification: Notification)
tableView.contentInset = .zero
【问题讨论】:
键盘出现了吗?是否设置了断点来检查keyboardWillShow
函数是否被调用?
@Mat 是的,它有效。 textField一切都很好,但是TextView没有结果,我可以滚动然后可以看到,它可以滚动到键盘本身吗?
【参考方案1】:
是的,你可以!
您需要做的就是知道您的文本字段位置,
然后set your scroll Offset
写这个:
NotificationCenter.default.addObserver(self, selector: #selector(yourMethod(_:)), name: UITextField.textDidBeginEditingNotification, object: nil)
和你的功能
@objc func yourMethod(_ sender: NSNotification)
if let tfActive = sender.object as? UITextField
let frameRelatedToSuper = tfActive.convert(yourScrollView.contentOffset, to: nil)
//[mockTF convertPoint:self.parentScrollView.contentOffset toView:nil];
yourScrollView.setContentOffset(frameRelatedToSuper, animated: true)
剩下的就是你的逻辑了。 祝你好运
注意:如果不增加额外的高度,它可能会停在文本字段的顶部 你可以声明这个
var padding: CGFloat = 10
padding = yourTF.bounds.height + padding
frameRelatedToSuper += padding
编辑:剩下的就是我的意思是你的逻辑,因为你需要计算你的键盘高度并添加到framerelatedtosuper
【讨论】:
以上是关于键盘快速出现时文本视图向上的主要内容,如果未能解决你的问题,请参考以下文章