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

如何在添加UISearchController后移除UINavigationBar下方阴影

解决UISearchController添加后UINavigationBar阴影重现的问题

我之前也碰到过这个坑——UISearchController确实会悄悄干扰导航栏的阴影设置!你之前用shadowImage = UIImage()移除阴影的方法本身没问题,但当你把搜索控制器添加到导航栏后,系统内部会重置导航栏的部分样式,导致阴影又冒出来了。

核心解决方案

要彻底解决这个问题,你需要同时设置导航栏的shadowImage和backgroundImage,并且把这些配置放在UISearchController初始化完成之后执行。这样可以覆盖搜索控制器带来的样式重置。

完整代码示例(不透明导航栏)

如果你的导航栏需要保持白色不透明,用这段代码:

override func viewDidLoad() {
    super.viewDidLoad()
    
    // 第一步:配置你的UISearchController
    let searchController = UISearchController(searchResultsController: nil)
    searchController.obscuresBackgroundDuringPresentation = false
    searchController.searchBar.placeholder = "输入搜索内容..."
    self.navigationItem.searchController = searchController
    
    // 第二步:移除导航栏阴影的关键设置
    self.navigationController?.navigationBar.shadowImage = UIImage()
    // 设置空背景图配合阴影图移除效果
    self.navigationController?.navigationBar.setBackgroundImage(UIImage(), for: .default)
    // 保持导航栏背景色为白色
    self.navigationController?.navigationBar.barTintColor = .white
    // 关闭半透明(如果需要不透明效果)
    self.navigationController?.navigationBar.isTranslucent = false
}

半透明导航栏的情况

如果你需要导航栏保持半透明效果,只需要调整isTranslucent为true,同时按需调整背景相关设置:

override func viewDidLoad() {
    super.viewDidLoad()
    
    let searchController = UISearchController(searchResultsController: nil)
    searchController.obscuresBackgroundDuringPresentation = false
    self.navigationItem.searchController = searchController
    
    // 半透明导航栏移除阴影
    self.navigationController?.navigationBar.isTranslucent = true
    self.navigationController?.navigationBar.shadowImage = UIImage()
    self.navigationController?.navigationBar.setBackgroundImage(UIImage(), for: .default)
}

为什么之前的尝试会有异常?

  • 单独设置setBackgroundImage而不配合shadowImage:系统默认会在导航栏底部显示阴影,仅设置背景图无法覆盖这个默认行为。
  • 设置isTranslucent = false时出现布局异常:这是因为导航栏半透明状态和不透明状态下,控制器的view布局起点会变化(半透明时view从屏幕顶部开始,不透明时从导航栏底部开始),如果你的布局没有适配这个变化,就会出现偏移或重叠问题。

内容的提问来源于stack exchange,提问作者Affinity

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 07:42:07