搜索控制器中的搜索栏重叠状态栏

时间:2017-11-27 03:45:51

标签: ios objective-c uisearchcontroller

我在UITableViewController中以编程方式创建了- (void)viewDidLoad { [super viewDidLoad]; _resultsTableViewController = [ResultsTableViewController new]; _searchController = [[UISearchController alloc] initWithSearchResultsController:_resultsTableViewController]; _searchController.searchResultsUpdater = _resultsTableViewController; _searchController.dimsBackgroundDuringPresentation = NO; self.definesPresentationContext = YES; self.tableView.tableHeaderView = _searchController.searchBar; } 。它工作正常,但搜索栏无法正确显示状态栏。这是我的代码和一些截图。取消搜索时,它也会产生一个有趣的动画。

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xmlns="http://java.sun.com/xml/ns/javaee"
  xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
  version="2.5">
  <display-name>pva-nb-uw-ui</display-name>

  <context-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>classpath:/application-context.xml</param-value>
  </context-param>

  <listener>
    <listener-class>
      org.springframework.web.context.ContextLoaderListener</listener-class>
  </listener>

  <servlet>
    <servlet-name>pva-nb-uw-ui</servlet-name>
    <servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class>
    <init-param>
      <param-name>jersey.config.server.provider.packages</param-name>
      <param-value>com.awpl.resources</param-value>
    </init-param>
    <load-on-startup>1</load-on-startup>
  </servlet>
  <servlet-mapping>
    <servlet-name>pva-nb-uw-ui</servlet-name>
    <url-pattern>/webapi/*</url-pattern>
  </servlet-mapping>

</web-app>

enter image description here

此处应该有更多填充状态栏。 enter image description here

当我取消搜索时,我在这里得到一个糟糕的动画,就是状态栏的高度。 enter image description here

2 个答案:

答案 0 :(得分:3)

从您的屏幕截图中可以看出,您正在iOS 11上工作,此版本与添加到UI的UISearchController搜索栏的更改方式相同。在iOS 11上是导航项目,负责显示搜索,因此UIKit尚未更新,无法正确处理表格标题视图中显示的搜索栏。

在iOS≤10时,您应该继续使用

self.tableView.tableHeaderView = _searchController.searchBar;

但切换到

self.navigationItem.searchController = _searchController;
self.navigationItem.hidesSearchBarWhenScrolling = YES;

在iOS 11及更高版本上。

答案 1 :(得分:1)

另一个警告是,searchBar可能仍会在版本&lt; iOS 11,除非您指定不希望它隐藏NavBar e.g。

    if (@available(iOS 11.0, *)) {
        self.navigationItem.searchController = self.mySearchController;
        self.navigationItem.hidesSearchBarWhenScrolling = YES;
    } else {
        // Fallback on earlier versions
        self.tableView.tableHeaderView = self.mySearchController.searchBar;       // show the SearchBar in TV header
        self.mySearchController.hidesNavigationBarDuringPresentation = NO;
    }