我的搜索控制器附加到导航项目,并带有自定义搜索栏样式(颜色)。这是代码:
searchController = UISearchController(searchResultsController: nil)
searchController.searchResultsUpdater = self
searchController.hidesNavigationBarDuringPresentation = false
searchController.dimsBackgroundDuringPresentation = false
let bar = searchController.searchBar
bar.placeholder = "Search songs"
bar.backgroundImage = .transparentPixel // transparent UIImage of size 1x1
bar.backgroundColor = UIColor(red: 0.02, green: 0.04, blue: 0.06, alpha: 1)
bar.tintColor = .white
bar.barTintColor = UIColor(red: 0.02, green: 0.04, blue: 0.06, alpha: 1)
bar.isTranslucent = false
bar.barStyle = .default
bar.showsCancelButton = true
definesPresentationContext = true
然后我将它添加到控制器:
if #available(iOS 11.0, *) {
controller.navigationItem.searchController = searchController
controller.navigationItem.hidesSearchBarWhenScrolling = false
} else {
// Fallback on earlier versions
tableView.tableHeaderView = searchController.searchBar
}
当我在动画期间导航到该控制器一小段时间时,搜索栏显示白色而不是我设置的颜色。不确定这些是默认样式还是仅一种白色背景颜色。这是视频:
在调试视图层次结构期间,我发现了一个白色背景,不确定它是否与问题有关:
更新:用于搜索的官方Apple示例代码(可以找到here)也存在类似问题。此外,它会在搜索栏下方显示黑色区域,同时设置推送新控制器的动画。我已将窗口的背景颜色更改为红色并改为显示红色:
在我的情况下,我没有白色背景的窗口或视图。如果有人遇到这个问题以及如何解决这个问题会很有趣。
答案 0 :(得分:1)
我通过删除背景图像设置修复了相同的错误
navigationController?.navigationBar.setBackgroundImage(UIImage(), for: .default)
答案 1 :(得分:0)
尝试一下。
self.extendedLayoutIncludesOpaqueBars = YES;
我在下面找到了这个解决方案。
iOS 11 UIRefreshControl with NavigationBar LargeTitle and SearchController disappearing