我在这里使用了 Apple 在其文档中的演示代码:
当通过点击 UITextField 出现键盘时,我需要向上滑动视图。我正在使用上面链接中的代码,Apple 自己的演示代码,这是有道理的。
但是,我的问题是,使用 Apple 的代码几乎没有改变,视图仅在键入时向上滑动,而不是在点击文本字段后实际滑动。
在该- (void)keyboardWasShown:(NSNotification*)aNotification
方法中,当调用此 if 语句时,视图是否向上滑动。如果文本字段在键盘下方,则向上滑动,如果不在键盘下方,则不向上滑动。
if (!CGRectContainsPoint(aRect, activeField.frame.origin) ) {
CGPoint scrollPoint = CGPointMake(0.0, activeField.frame.origin.y-kbSize.height);
[scrollView setContentOffset:scrollPoint animated:YES];
}
问题是,在点击文本字段时,会跳过此 if 语句,其中的代码不会运行。
我无法解决,但这一切都发生在下面的这种方法中。为什么它只在打字时向上滑动而不是最初的点击?
- (void)keyboardWasShown:(NSNotification*)aNotification
{
NSDictionary* info = [aNotification userInfo];
CGSize kbSize = [[info objectForKey:UIKeyboardFrameBeginUserInfoKey] CGRectValue].size;
UIEdgeInsets contentInsets = UIEdgeInsetsMake(0.0, 0.0, kbSize.height, 0.0);
scrollView.contentInset = contentInsets;
scrollView.scrollIndicatorInsets = contentInsets;
// If active text field is hidden by keyboard, scroll it so it's visible
// Your application might not need or want this behavior.
CGRect aRect = self.view.frame;
aRect.size.height -= kbSize.height;
if (!CGRectContainsPoint(aRect, activeField.frame.origin) ) {
CGPoint scrollPoint = CGPointMake(0.0, activeField.frame.origin.y-kbSize.height);
[scrollView setContentOffset:scrollPoint animated:YES];
}
}