【问题标题】:Hidden StatusBar reappears when SearchBar gets activated激活搜索栏时显示隐藏状态栏
【发布时间】:2016-02-22 21:02:57
【问题描述】:

我有一个带有 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
}

【问题讨论】:

  • 您希望它始终隐藏吗?您可以按照以下方式向您的 plist 添加一个条目:stackoverflow.com/questions/22299214/…
  • 当我将 UIViewControllerBasedStatusBarAppearance 添加为 false 并将 UIStatusBarHidden 添加为 true 时,状态栏始终隐藏在任何视图中。那会做,但这并不完全是我的想法。为每个视图控制器设置这个会很棒。

标签: ios swift uisearchcontroller


【解决方案1】:

Swift 3

要选择性地显示状态栏,您必须实现以下内容:

转到 Info.plist,添加“查看基于控制器的状态栏外观” -> YES。这将使您能够根据 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
}

【讨论】:

    猜你喜欢
    • 2013-10-21
    • 2016-03-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-14
    • 2012-01-06
    • 2023-03-30
    相关资源
    最近更新 更多