将SearchController添加到navigationItem会导致状态栏在活动状态下变为黑色

时间:2018-11-07 06:13:29

标签: ios swift xcode

此特定视图是UINavigationController的一部分,因此导航栏由UINavigationController提供。我在呈现视图控制器的viewDidLoad()中调用以下代码。

func buildSearchBar() {
    self.definesPresentationContext = true
    let searchController = UISearchController(searchResultsController: nil)
    self.navigationItem.searchController = searchController
    self.navigationItem.hidesSearchBarWhenScrolling = false
    self.navigationController?.navigationBar.barTintColor = UIColor(displayP3Red: 30/255, green: 50/255, blue: 49/255, alpha: 1.0)
    searchController.searchBar.backgroundColor = UIColor(displayP3Red: 30/255, green: 50/255, blue: 49/255, alpha: 1.0)
}

使用界面构建器,为导航控制器的导航栏设置相同的颜色。

激活搜索栏时,状态栏的背景变为黑色。

这是无效的。 Inactive

这是活动的。 Active

我已经在StackOverflow上多次看到此问题,并且没有有效的解决方案。对于大多数人来说,当他们设置搜索控制器后,它似乎可以立即使用。最新的示例使用类似的代码,并且没有提及存在此问题。

1 个答案:

答案 0 :(得分:0)

我在Xcode 10.1和osx 10.14.1中都使用了iPhone和模拟器,但没有重复这个问题。

enter image description here

如果要获得相同的颜色,只需添加self.navigationController?.navigationBar.isTranslucent = false

   func buildSearchBar() {
    self.definesPresentationContext = true
    let searchController = UISearchController(searchResultsController: nil)
    self.navigationItem.searchController = searchController
    self.navigationItem.hidesSearchBarWhenScrolling = false
    self.navigationController?.navigationBar.barTintColor = UIColor(displayP3Red: 30/255, green: 50/255, blue: 49/255, alpha: 1.0)
    self.navigationController?.navigationBar.isTranslucent = false
    searchController.searchBar.backgroundColor = UIColor(displayP3Red: 30/255, green: 50/255, blue: 49/255, alpha: 1.0)
}

enter image description here