键盘 hide/show 通知时 UITextView 的滚动视图问题
scrollView problem with UITextView when keyboard hide/show notification
我的 viewController 中的 scrollView
中有多个 textField
和 textView
。我使用这些代码处理键盘显示和隐藏:
我在 viewDidLoad
中添加了这行代码:
NotificationCenter.default.addObserver(self, selector: #selector(keyboardWillShow), name:UIResponder.keyboardWillChangeFrameNotification, object: nil)
NotificationCenter.default.addObserver(self, selector: #selector(keyboardWillHide), name:UIResponder.keyboardWillHideNotification, object: nil)
还有这两个函数:
@objc func keyboardWillShow(notification:NSNotification){
guard let keyboardValue = notification.userInfo?[UIResponder.keyboardFrameEndUserInfoKey] as? NSValue else { return }
let keyboardScreenEndFrame = keyboardValue.cgRectValue
let keyboardViewEndFrame = view.convert(keyboardScreenEndFrame, from: view.window)
let bottom = keyboardViewEndFrame.height - view.safeAreaInsets.bottom + 16
self.scrollView.contentInset = UIEdgeInsets(top: 0, left: 0, bottom: bottom , right: 0)
}
@objc func keyboardWillHide(notification:NSNotification){
self.scrollView.contentInset = UIEdgeInsets.zero
}
当我开始编辑文本字段时一切正常。但它不适用于 textView
并且无法滚动到活动的 textView。
我该如何解决?
此问题的原因已解释 here,因此如果您想在 UIScrollView
中使用 UITextView
,请取消选中右侧菜单检查器中的 Scrolling Enabled
或设置它 False
来自代码。
我的 viewController 中的 scrollView
中有多个 textField
和 textView
。我使用这些代码处理键盘显示和隐藏:
我在 viewDidLoad
中添加了这行代码:
NotificationCenter.default.addObserver(self, selector: #selector(keyboardWillShow), name:UIResponder.keyboardWillChangeFrameNotification, object: nil)
NotificationCenter.default.addObserver(self, selector: #selector(keyboardWillHide), name:UIResponder.keyboardWillHideNotification, object: nil)
还有这两个函数:
@objc func keyboardWillShow(notification:NSNotification){
guard let keyboardValue = notification.userInfo?[UIResponder.keyboardFrameEndUserInfoKey] as? NSValue else { return }
let keyboardScreenEndFrame = keyboardValue.cgRectValue
let keyboardViewEndFrame = view.convert(keyboardScreenEndFrame, from: view.window)
let bottom = keyboardViewEndFrame.height - view.safeAreaInsets.bottom + 16
self.scrollView.contentInset = UIEdgeInsets(top: 0, left: 0, bottom: bottom , right: 0)
}
@objc func keyboardWillHide(notification:NSNotification){
self.scrollView.contentInset = UIEdgeInsets.zero
}
当我开始编辑文本字段时一切正常。但它不适用于 textView
并且无法滚动到活动的 textView。
我该如何解决?
此问题的原因已解释 here,因此如果您想在 UIScrollView
中使用 UITextView
,请取消选中右侧菜单检查器中的 Scrolling Enabled
或设置它 False
来自代码。