0

我在表头中有一个带有 searchBar 的 UITableView。我在 viewWillAppear 中调用 setContentOffset 使其隐藏在顶部。但是,每当键盘显示然后隐藏时,比如在详细视图中编辑某些字段时,searchBar 就会重新出现。可能是由于 UITableView 的默认行为会根据键盘事件进行自我调整。

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

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

1 回答 1

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];
}
于 2013-10-21T04:25:58.150 回答