我读了很多主题,但我找不到解决办法:-(也许你可以帮忙!
在我的故事板(适用于iPad App)中,我有以下内容: - 作为我的初始场景的导航控制器 - 一个打开包含以下层次结构的View Controller的Segue: - 滚动视图 - >工具栏 - > BAR按钮项目 - >搜索栏提示 - >地图视图 - 导航项目 - >栏按钮项目
我的搜索栏位于底部工具栏中,因此当我点击它时会显示键盘并隐藏我的搜索栏。我想向上滚动所有内容以显示我的搜索栏(导航,地图,工具栏......)。
我已经注册了键盘通知并实现了IOS文档中描述的代码
- (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];
}
}
当执行此代码时,似乎发生了某些事情(我的地图视图显示的是白色视图而不是地图)并且键盘显示但我的搜索栏仍然不可见。
我的View层次结构中是否存在问题?因为它嵌入在导航控制器中?我对这个问题有点失落。只是一点,在我的层次结构中有一个scrollView之前我有一个简单的视图,由于搜索栏的问题,只是用滚动视图替换了简单视图。 非常感谢您的帮助! 谢谢,
塞巴斯蒂安。
答案 0 :(得分:0)
我发现了我的错误,这是因为我的应用程序处于横向模式,而uiSearchBar位置是相对于工具栏的。 以下是修复
- (void)keyboardWasShown:(NSNotification *)aNotification {
// Get the Keyboard size
NSDictionary* info = [aNotification userInfo];
CGSize kbSize = [[info objectForKey:UIKeyboardFrameBeginUserInfoKey] CGRectValue].size;
// Add to the scroll view a bottom inset equal to height of the keyboard
UIEdgeInsets contentInsets = UIEdgeInsetsMake(0.0, 0.0, kbSize.height, 0.0);
self.scrollView.contentInset = contentInsets;
self.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.width; // in landscape mode need to get width and not height!
// Compute the position of the uiSearchBar in the screen (whole scrollview)
CGPoint realPoint = [_LocateCell convertPoint:_LocateCell.frame.origin toView:self.scrollView];
if (!CGRectContainsPoint(aRect, realPoint) ) {
CGPoint scrollPoint = CGPointMake(0.0, kbSize.width);
[self.scrollView setContentOffset:scrollPoint animated:YES];
}
}