今天在使用UISearchDisplayController展示搜索结果的时候出现了一个问题,searchResultsTableView的内容在每次搜索之后会被抬的越来越高.如下图:
最终发现是键盘有关系,解决方法如下:
// 解决searchResultsTableView的Contentsize不正确的问题
- (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:UIEdgeInsetsMake(0, 0, 0, 0)];
[tableView setScrollIndicatorInsets:UIEdgeInsetsMake(0, 0, 0, 0)];
}
另外补充:
UISearchDisplayController点击searchbar后产生动画的原因:
首先需要具备2个条件之一;
1. searchBar的坐标y值为0,此时设置了viewController为UIRectEdgeNone.
2.viewCongroller内有tableView(坐标y值为0),并且searchBar被放到了tableViewHeaderView上.
系统的NavigationBar会在点击searchable后自动被隐藏,self.view 或 tableView会自动移动到顶部.这就看起来像是searchbar自动跑到了导航栏上一样。