我在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>
答案 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;
}