You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.17 09:57:36