Ios 选择上部UITextField时向下滚动UIScrollView

Ios 选择上部UITextField时向下滚动UIScrollView,ios,iphone,swift,uiscrollview,uitextfield,Ios,Iphone,Swift,Uiscrollview,Uitextfield,我有一个带有ContentView的ScrollView,它有5个UITextFields。我已经实施了adjustForKeyboard: func adjustForKeyboard(notification: NSNotification) { let userInfo = notification.userInfo! let keyboardScreenEndFrame = (userInfo[UIKeyboardFrameEndUserInfoKey] as! NSV

我有一个带有ContentView的ScrollView,它有5个UITextFields。我已经实施了adjustForKeyboard:

func adjustForKeyboard(notification: NSNotification) {
    let userInfo = notification.userInfo!

    let keyboardScreenEndFrame = (userInfo[UIKeyboardFrameEndUserInfoKey] as! NSValue).CGRectValue()
    let keyboardViewEndFrame = view.convertRect(keyboardScreenEndFrame, fromView: view.window)

    if notification.name == UIKeyboardWillHideNotification {
        scrollView.contentInset = UIEdgeInsetsZero
    } else {
        scrollView.contentInset = UIEdgeInsets(top: 0, left: 0, bottom: keyboardViewEndFrame.height, right: 0)
    }

    scrollView.scrollIndicatorInsets = scrollView.contentInset

}
当然,我已经设立了观察员:

override func viewWillAppear(animated: Bool) {
    // Add observers for keyboard
    let notificationCenter = NSNotificationCenter.defaultCenter()
    notificationCenter.addObserver(self, selector: "adjustForKeyboard:", name: UIKeyboardWillHideNotification, object: nil)
    notificationCenter.addObserver(self, selector: "adjustForKeyboard:", name: UIKeyboardWillChangeFrameNotification, object: nil)
}

当我从上到下选择文本字段时,它可以正常工作,但当我选择上文本字段时,它只移动了几个像素。如何更改我的方法?

更改底部内容插入将不会使scrollView滚动。它在底部设置了一个缓冲区,所以如果你一直滚动到底部,它将有更多的空间滚动

您希望修改scrollView的contentOffset并设置contentOffset更改的动画。你可以这样做:

var contentOffset = scrollView.contentOffset
contentOffset.y = contentOffset.y + (however much you want it to move)
scrollView.setContentOffset(contentOffset, animated: true)

这将使它根据选择的文本字段上下滚动。

因此我不需要基于通知类型的if-else?以及我应该移动多少?keyboardViewEndFrame.height或keyboardScreenEndFrame.height?这只是一个如何/修改内容的示例。您需要为show和hide案例执行不同的contentOffset,因为您可能希望状态不同。我不知道你应该移动多少,这取决于你想做什么。但是值不应该硬编码,对吗?我想这一定是和键盘有关的东西……是的,会的。我过去所做的是使用
keyboardFrame.origin.y
计算出键盘的最高点,然后做一系列的数学运算,计算出我想要的键盘相对于它的位置。将所有内容放入正确系统的一个有用方法是
textField.convertPoint(textField.origin.y,toView:UIWindow.mainWindow)
(这里有几个helper方法,但这就是它的要点)