在尝试了这里发布的大多数解决方案后,我仍然无法移动文本字段以在滚动视图中显示在键盘上方.
这些是我从Stackoverflow解决方案中获得的链接:
Link 1
Link 2
Link 3
这是我的代码:
class SignUpViewController: UIViewController,UITextFieldDelegate,UIScrollViewDelegate,UIPopoverPresentationControllerDelegate { @IBOutlet var firstNameTextField: UITextField! @IBOutlet var lastNameTextField: UITextField! @IBOutlet var phoneNumberTextField: UITextField! @IBOutlet var emailTextField: UITextField! @IBOutlet var submitButton: UIButton! @IBOutlet var professionButton: UIButton! var scrollView: UIScrollView? var activeTextField:UITextField? = UITextField() override func viewDidLoad() { super.viewDidLoad() let notificationCenter = NSNotificationCenter.defaultCenter() notificationCenter.addObserver(self,selector: #selector(SignUpViewController.keyboardWasShown(_:)),name: UIKeyboardWillShowNotification,object: nil) notificationCenter.addObserver(self,selector: #selector(SignUpViewController.keyboardWillBeHidden(_:)),name: UIKeyboardWillHideNotification,object: nil) scrollView = UIScrollView(frame: CGRect(x: 0,y: 0,width: self.view.frame.size.width,height: self.view.frame.size.height)) scrollView!.contentSize = CGSizeMake(self.view.frame.width,self.view.frame.height) defaultSettings() } func defaultSettings() { self.firstNameTextField.delegate = self self.lastNameTextField.delegate = self self.emailTextField.delegate = self self.phoneNumberTextField.delegate = self } func deregisterFromKeyboardNotifications() { //Removing notifies on keyboard appearing NSNotificationCenter.defaultCenter().removeObserver(self,object: nil) NSNotificationCenter.defaultCenter().removeObserver(self,object: nil) } func keyboardWasShown(notification: NSNotification) { //Need to calculate keyboard exact size due to Apple suggestions //self.scrollView!.scrollEnabled = true var info : NSDictionary = notification.userInfo! var keyboardSize = (info[UIKeyboardFrameBeginUserInfoKey] as? NSValue)?.CGRectValue().size var contentInsets : UIEdgeInsets = UIEdgeInsetsMake(0.0,0.0,keyboardSize!.height,0.0) self.scrollView!.contentInset = contentInsets self.scrollView!.scrollIndicatorInsets = contentInsets var aRect : CGRect = self.view.frame aRect.size.height -= keyboardSize!.height if (!CGRectContainsPoint(aRect,activeTextField!.frame.origin)) { // print(activeTextField?.frame) // var scrollPoint = CGPointMake(0.0,activeTextField!.frame.origin.y - (keyboardSize!.height-15)) self.scrollView!.scrollRectToVisible((activeTextField?.frame)!,animated: true) //self.scrollView?.setContentOffset(scrollPoint,animated: true) } } func keyboardWillBeHidden(notification: NSNotification) { //Once keyboard disappears,restore original positions //var info : NSDictionary = notification.userInfo! //var keyboardSize = (info[UIKeyboardFrameBeginUserInfoKey] as? NSValue)?.CGRectValue().size var contentInsets : UIEdgeInsets = UIEdgeInsetsZero self.scrollView!.contentInset = contentInsets self.scrollView!.scrollIndicatorInsets = contentInsets // self.view.endEditing(true) // self.scrollView!.scrollEnabled = false } func textFieldDidBeginEditing(textField: UITextField) { activeTextField = textField } func textFieldDidEndEditing(textField: UITextField) { activeTextField = nil }
正如您所看到的,我已尝试使用frame的scrollRectToVisible和使用Point的setContentOffset.两者都没用.而代码选中emailTextField作为隐藏文本字段.