那里有几种可用的方法:
您可以订阅键盘外观事件通知并手动更改偏移量:
//迅捷2.0+ override func viewDidLoad() { super.viewDidLoad() NSNotificationCenter.defaultCenter().addObserver(self, selector: #selector(YourVCClassName.keyboardWillShow(_:)), name: UIKeyboardWillShowNotification, object: nil) NSNotificationCenter.defaultCenter().addObserver(self, selector: #selector(YourVCClassName.keyboardWillHide(_:)), name: UIKeyboardWillHideNotification, object: nil) } func keyboardWillShow(notification: NSNotification) { if let userInfo =notification.userInfo{ if let keyboardHeight = userInfo[UIKeyboardFrameEndUserInfoKey]?.CGRectValue.size.height { tableView.contentInset= UIEdgeInsetsMake(0, 0, keyboardHeight, 0) } } } func keyboardWillHide(notification: NSNotification) { tableView.contentInset= UIEdgeInsetsMake(0, 0, 0, 0) } //Objective-C - (void)viewDidLoad { [super viewDidLoad]; [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWillShow:) name:UIKeyboardWillShowNotification object:nil]; [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWillHide:) name:UIKeyboardWillHideNotification object:nil]; } - (void)keyboardWillShow:(NSNotification *)notification { NSDictionary *userInfo = [notification userInfo]; if (userInfo) { CGRect keyboardEndFrame; [[userInfo objectForKey:UIKeyboardFrameEndUserInfoKey] getValue:&keyboardEndFrame]; tableView.contentInset= UIEdgeInsetsMake(0, 0, keyboardEndFrame.size.height, 0); } } - (void)keyboardWillHide:(NSNotification *)notification { tableView.contentInset= UIEdgeInsetsMake(0, 0, 0, 0); }
或使用现成的解决方案,例如TPKeyboardAvoidingTableView或TPKeyboardAvoidingScrollView https://github.com/michaeltyson/TPKeyboardAvoiding