使用UISearchDisplayController时,弹出窗口不会显示在iPad视图控制器上

All*_*len 4 ipad ios

我在UIViewController中创建了一个UISearchDisplayController,它位于UINavigationController中.

我使用了正常的init:

self.displayController = [[UISearchDisplayController alloc] initWithSearchBar:searchBar contentsController:self];
self.displayController.searchResultsDataSource = self;
self.displayController.searchResultsDelegate = self;
self.displayController.delegate = self;
self.displayController.displaysSearchBarInNavigationBar = YES;
Run Code Online (Sandbox Code Playgroud)

此代码工作正常,并显示iPhone中的灰色视图,但在iPad上它什么都不做.我在网上看,大多数人都说应该自动显示结果的弹出框.我根本没有看到这种情况发生.我是否必须以不同的方式为iPad UIViewControllers执行此操作?

我是以编程方式创建的.

Emm*_*ris 6

我在iPad和iOS7上的模态视图控制器(PageSheet样式)中使用UISearchDisplayController时发现了同样的问题:UISearchDisplayController不会像在iPhone上那样将自身附加到视图控制器的视图层次结构中.

作为一个不干净但有效的解决方法,您可以将自己的UISearchDisplayController生成的tableView附加到您的一个委托方法中的视图层次结构中:

- (void)searchDisplayController:(UISearchDisplayController *)controller didLoadSearchResultsTableView:(UITableView *)tableView
{
    if ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPad)
    {
        tableView.frame = self.view.frame;
        [self.view addSubview:tableView];
    }
}
Run Code Online (Sandbox Code Playgroud)

有两个警告:

  1. 您必须自己创建和显示灰色视图,只需创建一个黑色背景颜色和自我视图顶部50%alpha的视图,框架大小相同
  2. 您可能必须修复UISearchDisplayController提供的表视图的内容insets.

例如:

- (void)searchDisplayController:(UISearchDisplayController *)controller willShowSearchResultsTableView:(UITableView *)tableView 
{
    tableView.contentInset = UIEdgeInsetsMake(44.f, 0.f, 0.f, 0.f); 
}
Run Code Online (Sandbox Code Playgroud)