Iphone 调用cancelButton后将UISearchBar隐藏在UINavigationBar下方

Iphone 调用cancelButton后将UISearchBar隐藏在UINavigationBar下方,iphone,uisearchbar,uisearchdisplaycontroller,cancel-button,Iphone,Uisearchbar,Uisearchdisplaycontroller,Cancel Button,我通常使用[self.tableView setContentOffset:CGPointMake(0,40)]以隐藏导航栏下方的UISearchBar(我将其设置为tableView的标题)。在viewDidLoad中一切正常:加载视图时,搜索栏位于导航栏下方。然后我把同一行代码 [self.tableView setContentOffset:CGPointMake(0,40)] 在 但它可以做任何事情:单击“取消”按钮时,搜索栏仍然可见。 怎么了?下面的方法是从主线程调用的吗 - (vo

我通常使用
[self.tableView setContentOffset:CGPointMake(0,40)]
以隐藏导航栏下方的UISearchBar(我将其设置为tableView的标题)。在viewDidLoad中一切正常:加载视图时,搜索栏位于导航栏下方。然后我把同一行代码

[self.tableView setContentOffset:CGPointMake(0,40)]

但它可以做任何事情:单击“取消”按钮时,搜索栏仍然可见。
怎么了?

下面的方法是从主线程调用的吗

- (void)searchDisplayControllerWillEndSearch:(UISearchDisplayController *)controller
您可以这样检查:

if ([NSThread isMainThread]) {
    NSLog(@"Yes it is the main thread.");
}
否则,任何视图更改都不会在屏幕上注册。如果必须从单独的线程修改视图,则可以使用以下方法:

[self performSelectorOnMainThread:@selector(XXX) withObject:nil waitUntilDone:NO];

我不确定这是否是您的问题,但这正是我要开始寻找的地方。

以下方法应该可以做到这一点:

-(void)searchDisplayControllerDidEndSearch:(UISearchDisplayController *)controller{
    [self.tableView setContentOffset:CGPointMake(0,40)];    
}

确保将UISearchBar添加到tableview中。那么,只有contentOffset概念才会起作用。
-(void)searchDisplayControllerDidEndSearch:(UISearchDisplayController *)controller{
    [self.tableView setContentOffset:CGPointMake(0,40)];    
}