Ios 选择上部UITextField时向下滚动UIScrollView
我有一个带有ContentView的ScrollView,它有5个UITextFields。我已经实施了adjustForKeyboard: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
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方法,但这就是它的要点)