【问题标题】:How do I use UISearchController in iOS 8 where the UISearchBar is in my navigation bar and has scope buttons?如何在 iOS 8 中使用 UISearchController,其中 UISearchBar 在我的导航栏中并且有范围按钮?
【发布时间】:2015-01-10 18:59:31
【问题描述】:

我正在尝试使用 iOS 8 中的新 UISearchController,并将其 UISearchBar 嵌入到我的 UINavigationBar 中。这很容易做到,如下所示:

searchController = UISearchController(searchResultsController: nil)
searchController.searchResultsUpdater = self
searchController.delegate = self
searchController.searchBar.delegate = self
searchController.dimsBackgroundDuringPresentation = false
searchController.hidesNavigationBarDuringPresentation = false
navigationItem.titleView = searchController.searchBar

但是当我添加范围按钮时:

searchController.searchBar.showsScopeBar = true
searchController.searchBar.scopeButtonTitles = ["Posts, Users, Subreddits"]

它在UISearchBar后面添加了按钮,显然看起来很奇怪。

我应该怎么做?

【问题讨论】:

  • 你能提供一个快照吗?
  • 我遇到了同样的问题。似乎 UISearchController 不太理解 UISearchBar 位于导航栏内的想法。甚至苹果的示例似乎都将 searchBar 放在导航栏下方。
  • 你用的是哪个版本,这个问题在 beta 3 n 4.
  • 如果需要请点击此源链接,它应该有助于raywenderlich.com/16873/how-to-add-search-into-a-table-view

标签: ios uinavigationcontroller ios8 uisearchbar uisearchcontroller


【解决方案1】:

您遇到了一个“设计问题”,当searchController 未激活时,scopeBar 预计会被隐藏。

范围栏按钮出现在搜索栏的后面(下方),因为这是搜索栏变为活动状态并将其自身设置为导航栏时的位置。

当搜索未激活时,可见的范围栏会占用屏幕上的空间,分散内容的注意力,并使用户感到困惑(因为范围按钮没有要过滤的结果)。

由于您的 searchBar 已经位于 titleView 中,因此不会出现显示范围栏的(导航和搜索)栏动画。

  • 最简单的选项是找到下面的搜索栏 导航栏,然后让searchBar 动画到标题中 激活时的区域。导航栏将为其高度设置动画, 腾出空间来包含隐藏的范围栏。这都会 由搜索控制器处理。
  • 第二个选项几乎同样简单,就是使用搜索栏按钮 图标,它将使searchBarscopeBar 向下移动到 查看导航栏。

    - (IBAction)searchButtonClicked:(UIBarButtonItem *)__unused sender {
        self.searchController = [[UISearchController alloc] initWithSearchResultsController:nil];
        self.searchController.searchResultsUpdater = self;
        self.searchController.hidesNavigationBarDuringPresentation = NO;
        self.searchController.dimsBackgroundDuringPresentation = NO;
        self.definesPresentationContext = YES;
        self.searchController.searchBar.scopeButtonTitles = @[@"Posts", @"Users", @"Subreddits"];
        [self presentViewController:self.searchController animated:YES completion:nil];
    }
  • 如果你想让searchBar 保留在titleView 中,一个动画 做你想做的事不是内置的。你必须自己动手 处理导航栏高度变化并显示您自己的代码 范围栏(或挂钩到内部,并动画内置 scopeBar 向下进入视野)。

    如果你很幸运,其他人已经编写了willPresentSearchController: 代码来处理你想要的转换。

  • 1234563看看,即使搜索控制器未激活。

更新:

This answer 建议子类化UISearchController 以更改其搜索栏的高度。

【讨论】:

  • 第二个选项很棒(尤其是 searchController 的 presentViewController 部分)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-10-25
  • 2018-02-12
  • 2014-10-11
  • 1970-01-01
  • 1970-01-01
  • 2016-09-23
  • 2011-09-04
相关资源
最近更新 更多