[编辑:]问题已经解决了。我没有在UIBuilder
中正确链接我的代理人。代码很好!
我正在尝试在键盘出现时调整scrollview的大小。我去了开发人员文档并找到了这些信息。
在左侧“管理键盘”。
在文档中,它显示了一些代码来检测键盘的大小,然后调整UIScrollView
的大小。我在函数NSLog
的代码中放了一条- (void)keyboardWasShown:(NSNotification*)aNotification
消息,所以我看到该函数实际上已被调用,但当我尝试NSLog
时kbSize
。它的值总是为0。
为什么苹果为此目的提供的代码不起作用?
- (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];
}
}
答案 0 :(得分:33)
您可能需要尝试强烈推荐的“TPKeyboardAvoidingScrollView”,可从以下网址获取:https://github.com/michaeltyson/TPKeyboardAvoiding
像魅力一样......
答案 1 :(得分:3)
您是否曾为该特定通知添加了观察者?请确保使用loadView
方法执行此操作:
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWasShown:) name:UIKeyboardDidShowNotification object:nil];
不要忘记在viewDidUnload
方法取消注册观察者,如下所示:
[[NSNotificationCenter defaultCenter] removeObserver:self];
让我知道这是否成功!
答案 2 :(得分:0)
我已经使用UITableView
(这只是一个扩展的UIScrollView
)多次完成此操作。你可以找到code in this answer。
答案 3 :(得分:0)
一个简单的解决方案是将扩展UIViewController + Keyboard.swift添加到项目中,只需一行
setupKeyboardNotifcationListenerForScrollView(scrollView)
键盘出现时会自动自动调整大小。不需要任何子类,只是一个扩展!它可以在GitHub上使用SingleLineKeyboardResize