滚动或直到按下搜索栏时导航栏下方的白线

Posted

技术标签:

【中文标题】滚动或直到按下搜索栏时导航栏下方的白线【英文标题】:White line under navigation bar when scrolling or until pressing on the search bar 【发布时间】:2017-04-19 13:28:42 【问题描述】:

正如您在视频中看到的,当我开始滚动时,导航栏下方会出现一条白色细线。

它只会在我按下 searchBar(包含在我的 searchController 中,因此不会从 Storyboard 添加搜索栏)时消失。我尝试了很多不同的组合以试图让它消失,但没有任何效果。

感谢任何帮助!谢谢!

视频: https://www.youtube.com/watch?v=KcgZmBg1VS0

这是我viewDidLoad里面的代码:

searchController.searchBar.delegate = self

searchController.dimsBackgroundDuringPresentation = false
searchController.hidesNavigationBarDuringPresentation = false
searchController.searchBar.placeholder = "Search for a recipe"

searchController.searchBar.barTintColor = navigationController?.navigationBar.barTintColor
searchController.searchBar.tintColor = UIColor.white

【问题讨论】:

这个白线问题是一个错误,即使在最新的 ios 12 测试版中也是如此。禁用导航栏的半透明会有所帮助,但这会影响 UI 和滚动视图行为。 【参考方案1】:

尝试设置背景颜色和更改navigationBar 的阴影。它可能与navigationBar有关。

self.navigationController?.navigationBar.setBackgroundImage(UIImage(), forBarMetrics: UIBarMetrics.Default)
self.navigationController?.navigationBar.shadowImage = UIImage()

尝试添加这一行:

searchController.searchBar.backgroundColor = navigationController?.navigationBar.barTintColor

在文件setupSearchBar()

代码修复后:

【讨论】:

@TomaRadu-Petrescu 我将创建测试项目并尝试看看发生了什么 那太好了 :) 谢谢! @TomaRadu-Petrescu 我用 searchController 创建了一个小项目,但没有收到这种行为。所以这可以连接到我们的导航栏。能否请您与导航栏自定义共享代码 @TomaRadu-Petrescu 我添加了应该修复行为的小代码修复。 哇!它解决了这个问题。非常感谢您的时间和答案!!!【参考方案2】:

顺便说一句,您可以移除导航栏下方的阴影。我为此创建了扩展:

extension UINavigationBar 

  func shouldRemoveShadow(_ value: Bool) -> Void 
    self.setValue(value, forKey: "hidesShadow")
  

【讨论】:

我根本没有验证您输入的内容,但我想指出if 毫无意义。您已经有一个布尔值,所以将它用作setValue 的参数!这个方法的主体可以是 1 行而不是 5 行:self.setValue(value, forKey: "hidesShadow")

以上是关于滚动或直到按下搜索栏时导航栏下方的白线的主要内容,如果未能解决你的问题,请参考以下文章

如何在按下导航栏时快速隐藏键盘

屏幕键盘出现时iOS隐藏导航栏

停止导航栏与表格一起滚动

iOS - 通过动画将搜索栏从中心移动到导航栏下方(Swift)

单击搜索栏时如何导航到另一个视图控制器

当我点击带有动画的搜索栏时,iOS隐藏导航栏