以下问题仅发生在iOS 7.0+设备上运行的iOS 6.0 / 6.1应用程序中。
所以我有一个UISearchDisplayController
来搜索我们的API并返回数据。这一切都有效,一切都按我们的意愿显示。我们看到的唯一问题是,在内容填充searchResultsTableView
之后,似乎最初隐藏键盘时,contentSize
的{{1}}比数据大得多,实际上似乎是键盘的大小。当我进入搜索栏并显示键盘并再次点击“搜索”(只是为了隐藏键盘)时,searchResultsTableView
然后正确调整以仅填充屏幕,仅此而已。下面是我正在谈论的最初contentSize
人口的屏幕截图。
白色是表格数据,灰色/奶油色是额外的tableView
空间。
有关如何解决此问题的任何想法?
答案 0 :(得分:62)
我遇到了这个问题。发布在论坛here上的解决方案为我工作。不确定这是iOS 7中的错误,还是他们改变了他们做事的方式,但这是我找到解决问题的唯一解决方案。
来自论坛帖子的懒人解决方案:
- (void)searchDisplayController:(UISearchDisplayController *)controller didHideSearchResultsTableView:(UITableView *)tableView {
[[NSNotificationCenter defaultCenter] removeObserver:self name:UIKeyboardWillHideNotification object:nil];
}
- (void)searchDisplayController:(UISearchDisplayController *)controller willShowSearchResultsTableView:(UITableView *)tableView {
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWillHide) name:UIKeyboardWillHideNotification object:nil];
}
- (void) keyboardWillHide {
UITableView *tableView = [[self searchDisplayController] searchResultsTableView];
[tableView setContentInset:UIEdgeInsetsZero];
[tableView setScrollIndicatorInsets:UIEdgeInsetsZero];
}
答案 1 :(得分:8)
这个系统错误仍然存在于iOS 8中,并且接受答案的解决方案不再适用。因此,您应该使用以下解决方案:
-(void)searchDisplayController:(UISearchDisplayController *)controller didHideSearchResultsTableView:(UITableView *)tableView {
[[NSNotificationCenter defaultCenter] removeObserver:self name:UIKeyboardWillHideNotification object:nil];
}
-(void)searchDisplayController:(UISearchDisplayController *)controller willShowSearchResultsTableView:(UITableView *)tableView {
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWillHide:) name:UIKeyboardWillHideNotification object:nil];
}
-(void)keyboardWillHide:(NSNotification*)notification {
CGFloat height = [[[notification userInfo] objectForKey:UIKeyboardFrameEndUserInfoKey] CGRectValue].size.height;
UITableView *tableView = [[self searchDisplayController] searchResultsTableView];
UIEdgeInsets inset;
[[[UIDevice currentDevice] systemVersion] floatValue] >= 8.0 ? (inset = UIEdgeInsetsMake(0, 0, height, 0)) : (inset = UIEdgeInsetsZero);
[tableView setContentInset:inset];
[tableView setScrollIndicatorInsets:inset];
}