当键盘隐藏时,如何阻止UITableView显示searchBar

时间:2013-10-21 02:58:43

标签: uitableview uisearchbar

我在表头中有一个带有searchBar的UITableView。我在viewWillAppear中调用setContentOffset,它将它隐藏在顶部。但是,只要键盘显示然后隐藏,比如在编辑详细视图中的某些字段时,搜索栏就会重新出现。也许是因为UITableView的默认行为是为了响应键盘事件而自行调整。

有什么方法可以阻止tableView向下滚动。我已经尝试在keyboardDidHide {}中放入相同的setContentOffset,但它似乎过多地偏移了tableView。理想情况下,我不希望在tableView中看到任何移动。

- (void) viewWillAppear:(BOOL)animated {
    LOG(@"viewWillAppear: called");
    [super viewWillAppear:animated];
    [self.tableView setContentOffset:CGPointMake(0, 44)];
}

1 个答案:

答案 0 :(得分:0)

希望有一个比我想出的更优雅的答案。

我只是在键盘隐藏之前获取contentOffset,获取searchBar,将其从标题中删除,然后在键盘被隐藏后将其全部放回去。不幸的是,这并没有阻止空行的动画,但它会阻止内容向下移动然后再向上移动。

- (void)keyboardWillHide:(NSNotification *)n
{
    LOG(@"keyboardWillHide: called");
    _contentOffset = self.tableView.contentOffset;
    _searchBar = (UISearchBar*)self.tableView.tableHeaderView;
    self.tableView.tableHeaderView = nil;
}
- (void)keyboardDidHide:(NSNotification *)n
{
    LOG(@"keyboardDidHide: called");
    self.tableView.tableHeaderView = _searchBar;
    [self.tableView setContentOffset:_contentOffset animated:NO];
}