我有一个包含 UISearchBar 的视图。此 UISearchBar不显示在页面顶部 - 它位于屏幕顶部下方约 90 pts 处,位于标题图像下方。
视图的所有元素都包装在 UIScrollView 中。当用户在 UISearchBar 中点击时会发生正确的事情 - 整个视图向上滚动,因此搜索栏位于屏幕的最顶部,视图内容上出现一个深色覆盖,并且键盘向上滑动。
到目前为止一切都很好。当我想取消搜索并将所有内容返回到之前的位置(UISearchBar 不再位于屏幕顶部)时,问题就出现了。
如果用户在键盘显示时点击取消,我可以做到这一点 - 只需监听 UIKeyboardWillHideNotification,然后将滚动视图的内容偏移设置回 (0, 0)。
但是,如果用户在某些搜索结果上拖动手指,则键盘将消失,因此您可以获得更大的搜索结果视图。如果用户然后点击取消,搜索栏仍然在页面顶部,一切看起来都很糟糕。
我尝试将“setContentOffset”代码放入 UISearchDisplayDelegate:
- (void)searchDisplayController:(UISearchDisplayController *)controller didHideSearchResultsTableView:(UITableView *)tableView
{
[_scrollView setContentOffset:CGPointMake(0,0) animated:YES];
}
这可行,但看起来不太好,因为滚动直到搜索结果消失后才会发生(因此您会看到两个单独的动画)。
然后我尝试了这个方法(在表格视图被隐藏之前调用):
- (void)searchDisplayController:(UISearchDisplayController *)controller willHideSearchResultsTableView:(UITableView *)tableView
{
[_scrollView setContentOffset:CGPointMake(0,0) animated:YES];
}
但是,这没有任何效果。内容偏移量没有改变。
有小费吗?