问题陈述:我有 UIView 的 Nib 文件包含 UIScrollview,在 ScrollView 中我有几个 TextFields 和底部的 TextView。我想要的是当文本字段或 TextView 开始编辑时向上滚动。
我尝试过:
在客户方法中
NotificationCenter.default.addObserver(self, selector: #selector(keyboardWasShown(notification:)), name: NSNotification.Name.UIKeyboardWillShow, object: nil)
我正在调用此方法父 View 。
通知处理:
func keyboardWasShown(notification: NSNotification)
{
var userInfo = notification.userInfo!
var keyboardFrame:CGRect = (userInfo[UIKeyboardFrameBeginUserInfoKey] as! NSValue).cgRectValue
keyboardFrame = self.convert(keyboardFrame, from: nil)
var contentInset:UIEdgeInsets = self.mainScroll.contentInset
contentInset.bottom = keyboardFrame.size.height
self.mainScroll.contentInset = contentInset
}
这对于 UITextFields 来说工作得很好,但对于 UITextView 来说却不起作用。知道错误在哪里。
PS:我也设置了UITextField和UITextView的委托(delegate)。
任何帮助将不胜感激。
最佳答案
将 KeyboardWasShown 函数替换为以下函数:
func keyboardWasShown(notification: NSNotification)
{
var userInfo = notification.userInfo!
var keyboardFrame:CGRect = (userInfo[UIKeyboardFrameBeginUserInfoKey] as! NSValue).cgRectValue
keyboardFrame = self.convert(keyboardFrame, from: nil)
self.mainScroll.contentOffset = CGPoint(x: 0, y: keyboardFrame.size.height - Any number that fits your need.)
}
在 keyBoardWillHide 中:
self.mainScroll.contentOffset = CGPoint(x: 0, y: 0)
希望能有所帮助。 快乐编码!
关于ios - UIScrollView 在键盘上向上滚动,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42899098/