ios - 激活搜索栏时会出现隐藏状态栏

标签 ios swift uisearchcontroller

我有一个带有 TableView 但没有 NavigationBar/NavigationController 的简单应用程序。该应用程序还有一个 UISearchController 和一个始终可见的 SearchBar。我尝试使用 prefersStatusBarHidden 隐藏状态栏,效果很好。直到搜索栏被激活。然后状态栏将再次出现。

如何防止这种情况发生并保持状态栏隐藏?

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

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

转到 Info.plist,添加“查看基于 Controller 的状态栏外观”-> 。这将使您能够根据特定 View 的 prefersHiddendStatusBar 变量的状态设置外观。

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

接下来,您需要创建一种方法来存储您的条件首选项:“我想现在显示状态栏吗?”在 View Controller 中,创建一个 bool 变量来保存此首选项:

var displayStatusBar: Bool = false

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

func searchBarTextDidBeginEditing(_ searchBar: UISearchBar)

func searchBarCancelButtonClicked(_ searchBar: UISearchBar)

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

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

override var prefersStatusBarHidden: Bool {
    return hideStatusBar
}

关于ios - 激活搜索栏时会出现隐藏状态栏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35563770/

相关文章:

ios - 根据单元格中的内容自动更改单元格内容 - Xcode 9.2 Swift 4

ios - 没有prepareForSegue的Swift ViewController

ios - UISearchController - 搜索栏应该始终可见

swift - viewDidLoad 之前和之后的区别

ios - 为 iphone 主屏幕设置我的网站图标

ios - 在 iTunes 上隐藏额外的本地化

iOS PushKit 响铃电话

ios - 关闭 UISearchController 会破坏分组的 UITableViewController 视觉效果

ios - 创建一个可以嵌入到 UIViews 中并处理自己的模态的可重用控件

ios - Cloudkit 查询时间 -