我有一种情况,我想使用 UISearchController 来允许搜索/过滤 UITableView 的内容。我想要的行为与 Apple 在联系人应用程序中所做的相同,其中搜索栏保持固定在表格视图的顶部,内容在下方滚动。当点击搜索栏时,我希望栏动画的默认行为覆盖导航栏并显示下面的结果,就像 Apple 联系人一样。
我制作了一个示例应用程序来隔离事物并将其与以下搜索控制器初始化代码配对。这个 VC 是带有半透明导航栏的 UINavigationController 的根视图控制器。
self.navigationItem.title = @"Title";
self.edgesForExtendedLayout = UIRectEdgeNone;
self.searchController = [[UISearchController alloc] initWithSearchResultsController:nil];
self.searchController.searchBar.frame = CGRectMake(0.0f, 0.0f, 320.0f, 44.0f);
self.searchController.hidesNavigationBarDuringPresentation = YES;
self.searchController.dimsBackgroundDuringPresentation = NO;
[self.view addSubview:self.searchController.searchBar];
self.definesPresentationContext = YES;
这会导致两个问题:1) 搜索栏没有将高度扩展到 64px,因此您仍然可以看到状态栏后面的内容;2) 每当您将项目推送到导航堆栈然后返回时,父视图中的内容 (表视图)跳转。
我已经看到很多关于 UISearchcontroller 的困惑,所以我并不十分乐观地认为有人有一个好的解决方案,但无论如何都要尝试。