不能与UICollectionView使用UISearchController?

在WWDC 2014的演讲“A Look Inside Presentation Controllers”中,演示者展示了如何在UITableView中设置UISearchController。 他们通过设置searchController的searchBar框架,然后将其设置为tableView的tableHeaderView。 不幸的是,没有相当于UICollectionView的tableHeaderView。 使用UISearchDisplayController,这将很简单:创build一个UISearchBar并将其添加到自定义的UICollectionView节头中,然后使用search栏初始化UISearchDisplayController。 问题是,你不能用UISearchBar初始化一个UISearchController,或者甚至设置searchBar,因为它是一个只读属性。 我想我真正的问题是,我有什么select? 没有UISearchDisplayController或UISearchController实现search的“好”的方式吗?

使用UISearchDisplayController,这将很简单:创build一个UISearchBar并将其添加到自定义的UICollectionView节头中,然后使用search栏初始化UISearchDisplayController

UISearchController中的search栏是为您创build的。 当你被问到数据源方法中的补充视图时

- (UICollectionReusableView *)collectionView:(UICollectionView *)collectionView viewForSupplementaryElementOfKind:(NSString *)kind atIndexPath:(NSIndexPath *)indexPath 

将searchController.searchBar添加为补充视图的子视图。 别忘了打电话

 [searchController.searchBar sizeToFit] 

为了给search栏适当的大小。

我的第一个问题:为什么你不能翻转你的逻辑,而不是创build一个search栏,首先创build一个UISearchController,抓住它的search栏,并将其添加到节头?

其次,集合视图布局不像表视图那么简单。 search很难用集合视图布局来猜测你的意图,而表视图非常简单。 因此,在收集视图的情况下,您可以自由地添加一个search栏到视图,但将其animation到一个活动状态将需要一些工作。 (子类UISearchController并返回自己的animation控制器,然后做任何你想要的animation,或者只是从你的子类实现UIViewControllerAnimatedTransitioning的方法,不要调用超级,都应该工作)

你可能想要尝试的是从屏幕外显示search栏。 这是UISearchController在setActive:被调用时所支持的内置animation,search栏不在视图层次结构中的任何位置。 日历这样做…这很酷。 而不是总是有一个巨大的search栏,您可以减lesssearch到驱动演示的图标。

最后,肯定会有bug。 在您认为不应该使用的东西运行时提交bug 。 我知道,这是一个破纪录,但它确实是一个必要条件。