演示链接:https://github.com/harshilkotecha/UIScrollViewWhenKeyboardAppearInSwift3
当你有多个TextView的它是如此的困难所以最好的解决方案 - >
第1步:添加UITextFieldDelegate
class ScrollViewController: UIViewController,UITextFieldDelegate {
第2步:创建新的IBOutlet中但不要与任何文本字段连接
// get current text box when user Begin editing
@IBOutlet weak var activeTextField: UITextField?
步骤3:写此二方法当用户聚焦文本提交对象传递activeTextField
基准和存储
// get current text field
func textFieldDidBeginEditing(_ textField: UITextField)
{
activeTextField=textField;
}
func textFieldDidEndEditing(_ textField: UITextField)
{
activeTextField=nil;
}
步骤5:在viewDidLoad中setNotificationKeyboard集通知
override func viewWillAppear(_ animated: Bool) {
// call method for keyboard notification
self.setNotificationKeyboard()
}
// Notification when keyboard show
func setNotificationKeyboard() {
NotificationCenter.default.addObserver(self, selector: #selector(keyboardWasShown(notification:)), name: .UIKeyboardWillShow, object: nil)
NotificationCenter.default.addObserver(self, selector: #selector(keyboardWillBeHidden(notification:)), name: .UIKeyboardWillHide, object: nil)
}
步骤6:两种方法隐藏和显示键盘
func keyboardWasShown(notification: NSNotification)
{
var info = notification.userInfo!
let keyboardSize = (info[UIKeyboardFrameBeginUserInfoKey] as? NSValue)?.cgRectValue.size
let contentInsets : UIEdgeInsets = UIEdgeInsetsMake(0.0, 0.0, keyboardSize!.height+10, 0.0)
self.scrollView.contentInset = contentInsets
self.scrollView.scrollIndicatorInsets = contentInsets
var aRect : CGRect = self.view.frame
aRect.size.height -= keyboardSize!.height
if let activeField = self.activeTextField
{
if (!aRect.contains(activeField.frame.origin))
{
self.scrollView.scrollRectToVisible(activeField.frame, animated: true)
}
}
}
// when keyboard hide reduce height of scroll view
func keyboardWillBeHidden(notification: NSNotification){
let contentInsets : UIEdgeInsets = UIEdgeInsetsMake(0.0, 0.0,0.0, 0.0)
self.scrollView.contentInset = contentInsets
self.scrollView.scrollIndicatorInsets = contentInsets
self.view.endEditing(true)
}
您可以使用contentoffset滚动滚动视图。 – Prabhat
使用https://github.com/hackiftekhar/IQKeyboardManager,它会自动检测textField或textView并相应地管理所有键盘处理。 –
@ZahidShabbir:在textview的情况下,scrollview不滚动或滚动一点? – Poles