键盘出现在iPad App中时,在工具栏中滚动UISearchBar?

时间:2012-04-29 14:54:44

标签: ios ipad uiscrollview keyboard uisearchbar

我读了很多主题,但我找不到解决办法:-(也许你可以帮忙!

在我的故事板(适用于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之前我有一个简单的视图,由于搜索栏的问题,只是用滚动视图替换了简单视图。 非常感谢您的帮助! 谢谢,

塞巴斯蒂安。

1 个答案:

答案 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];
}

}