UISearchBar嵌入导航栏后始终显示灰色底色问题求助
解决导航栏中UISearchBar灰色底色问题(iOS14+ Swift5)
要消除导航栏中UISearchBar的灰色底色,需从统一导航栏外观配置和移除SearchBar内部默认背景视图两方面入手,具体实现如下:
修改后的完整代码
class SearchControllerTests3: UIViewController { override func viewDidLoad() { super.viewDidLoad() view.backgroundColor = .white navigationItem.title = "Search Bar" // 配置导航栏外观(iOS14+ 官方推荐方式) let navAppearance = UINavigationBarAppearance() navAppearance.backgroundColor = .white navAppearance.shadowColor = .clear // 可选:移除导航栏底部阴影线 navigationController?.navigationBar.standardAppearance = navAppearance navigationController?.navigationBar.scrollEdgeAppearance = navAppearance navigationController?.navigationBar.compactAppearance = navAppearance let searchController = UISearchController() let searchBar = searchController.searchBar // 移除SearchBar文本框自带的灰色背景视图 searchBar.searchTextField.backgroundView?.removeFromSuperview() // 设置文本框背景色与光标颜色(光标需与背景形成对比) searchBar.searchTextField.backgroundColor = .white searchBar.searchTextField.tintColor = .black // 设置SearchBar本身背景色 searchBar.backgroundColor = .white navigationItem.searchController = searchController } }
关键细节说明
- iOS14及以上版本中,导航栏样式优先级为
UINavigationBarAppearance> 旧属性(如barTintColor),必须用Appearance统一配置才能覆盖系统默认样式。 - UISearchBar的
searchTextField默认带有灰色背景视图,直接移除即可消除底色问题,之后可根据需求自定义文本框样式。 - 光标颜色需与背景色形成对比,白色背景下建议设置为黑色或其他深色,避免光标不可见。
内容的提问来源于stack exchange,提问作者Stephanovits
相关产品推荐
相关产品推荐

