我在表头中有一个带有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)];
}
答案 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];
}