当键盘隐藏时,如何阻止UITableView显示搜索栏

当键盘隐藏时,如何阻止UITableView显示搜索栏,uitableview,uisearchbar,Uitableview,Uisearchbar,我有一个UITableView,在表头有一个搜索栏。我正在调用ViewWillDisplay中的setContentOffset,它会将其隐藏在顶部。但是,无论何时显示然后隐藏键盘,例如在详细视图中编辑某些字段时,搜索栏都会重新出现。可能是由于UITableView的默认行为导致它根据键盘事件进行自我调整 是否有任何方法可以防止tableView向下滚动。我曾尝试将相同的setContentOffset放在keyboardDidHide{}中,但它似乎会将tableView偏移太多。理想情况下,

我有一个UITableView,在表头有一个搜索栏。我正在调用ViewWillDisplay中的setContentOffset,它会将其隐藏在顶部。但是,无论何时显示然后隐藏键盘,例如在详细视图中编辑某些字段时,搜索栏都会重新出现。可能是由于UITableView的默认行为导致它根据键盘事件进行自我调整

是否有任何方法可以防止tableView向下滚动。我曾尝试将相同的setContentOffset放在keyboardDidHide{}中,但它似乎会将tableView偏移太多。理想情况下,我不希望在tableView中看到任何移动

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

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

我只是在键盘隐藏之前获取contentOffset,获取搜索栏,将其从标题中删除,然后在键盘隐藏后将其全部放回。不幸的是,这并不能阻止空行的动画,但它确实阻止了包含内容的行向下移动,然后再向上移动

- (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];
}