取消搜索时,setContentOffset不正确

时间:2010-09-22 22:04:42

标签: iphone uiscrollview uisearchbar uisearchdisplaycontroller

我有一个包含UISearchBar的视图。此UISearchBar 显示在页面顶部 - 从屏幕顶部向下约90点,在标题图像下。

视图的所有元素都包含在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];
}

然而,这没有任何效果。内容偏移量不会改变。

任何提示?

1 个答案:

答案 0 :(得分:0)

也许搜索显示控制器正在为您设置内容偏移量?请尝试在searchDisplayController:didShowSearchResultsTableView:中设置内容偏移量。