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

时间:2016-02-22 21:02:58

标签: ios swift uisearchcontroller

我有一个带有TableView但没有NavigationBar / NavigationController的简单应用程序。该应用程序还有一个UISearchController,其SearchBar始终可见。我试图用 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
}

1 个答案:

答案 0 :(得分:0)

Swift 3

要有选择地显示状态栏,您必须执行以下操作:

转到Info.plist,添加'查看基于控制器的状态栏外观' - > 即可。这将使您能够根据特定视图的 prefersHiddendStatusBar 变量的状态设置外观。

Interface Builder中的设置仅适用于模拟指标;也就是说,使用Interface Builder时在StoryBoard对象中显示的内容。

接下来,您需要创建一种存储条件偏好的方法:“我想立即显示状态栏吗?”在视图控制器中,创建一个布尔变量来保存此首选项:

var displayStatusBar: Bool = false

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

func searchBarTextDidBeginEditing(_ searchBar: UISearchBar)

func searchBarCancelButtonClicked(_ searchBar: UISearchBar)

在每个委托方法中,您可以将displayStatusBar变量设置为true或false,然后在每个方法中使用 setNeedsStatusBarAppearanceUpdate()。这将强制在状态栏中重新加载。如果您认为它看起来不稳定,请将该代码放入UIView.animate(withDuration:_)完成块中,以获得良好且平滑的视觉变化。

最后,您需要覆盖View的首选状态变量并将其设置为首选变量。

override var prefersStatusBarHidden: Bool {
    return hideStatusBar
}
相关问题