当SearchBar被激活时,隐藏的StatusBar会重新出现

我有一个简单的应用程序与TableView,但没有NavigationBar / NavigationController。 该应用程序还具有一个始终可见的SearchBar的UISearchController。 我试图用prefersStatusBarHidden隐藏状态栏,工作正常。 直到SearchBar被激活。 然后状态栏会再次出现。

我怎样才能防止这种情况,并保持状态栏隐藏?

var cityRepository:CityRepository? var searchController:UISearchController? override func viewDidLoad() { self.cityRepository = CityRepository() self.searchController = UISearchController(searchResultsController: nil) self.searchController!.searchResultsUpdater = self self.searchController!.dimsBackgroundDuringPresentation = false self.definesPresentationContext = true self.tableView.tableHeaderView = searchController?.searchBar //* Already tried this .... self.edgesForExtendedLayout = UIRectEdge.None self.extendedLayoutIncludesOpaqueBars = true self.automaticallyAdjustsScrollViewInsets = false super.viewDidLoad() } override func prefersStatusBarHidden() -> Bool { return true } 

Swift 3

要select显示状态栏,您必须执行以下操作:

转到Info.plist,添加“ 查看基于控制器的状态栏外观 ” – > 。 这将使您可以根据特定视图的prefersHiddendStatusBarvariables的状态设置外观。

Interface Builder中的设置仅用于模拟量度; 也就是使用Interface Builder时在StoryBoard对象中显示的内容。

接下来,您将需要创build一种方法来存储您的条件首选项:“我现在要显示状态栏吗? 在你的视图控制器中,创build一个布尔variables来保存这个首选项:

 var displayStatusBar: Bool = false 

然后,当您使用SearchController时,您必须绑定到与search栏交互时触发的特定委托方法。 我build议使用:

 func searchBarTextDidBeginEditing(_ searchBar: UISearchBar) 

 func searchBarCancelButtonClicked(_ searchBar: UISearchBar) 

在每个委托方法中,可以将displayStatusBarvariables设置为true或false,然后在每个方法中使用setNeedsStatusBarAppearanceUpdate() 。 这将强制在状态栏重新加载。 如果你觉得它看起来不稳定,那么把这段代码放在UIView.animate(withDuration:_)完成块中,以获得一个漂亮而平滑的视觉变化。

最后,您需要重写视图的首选状态variables并将其设置为首选variables。

 override var prefersStatusBarHidden: Bool { return hideStatusBar }