Swift 使用彩色导航栏时,搜索栏中会出现白线

Swift 使用彩色导航栏时,搜索栏中会出现白线,swift,uinavigationcontroller,uitabbarcontroller,uisearchbar,Swift,Uinavigationcontroller,Uitabbarcontroller,Uisearchbar,单击搜索栏时,我会看到多条白线 当同时使用TabBarController和彩色栏NavigationController时会发生这种情况,但是 仅当使用NavigationController时,它才起作用 当TabBarController和NavigationController都使用默认颜色时,它会工作 我使用以下代码行在AppDelegate中设置导航颜色: UINavigationBar.appearance().barTintColor = UIColor(rgb: 0

单击搜索栏时,我会看到多条白线

当同时使用TabBarController和彩色栏NavigationController时会发生这种情况,但是

  • 仅当使用NavigationController时,它才起作用
  • 当TabBarController和NavigationController都使用默认颜色时,它会工作


我使用以下代码行在AppDelegate中设置导航颜色:

UINavigationBar.appearance().barTintColor =  UIColor(rgb: 0x0277BD)
UINavigationBar.appearance().titleTextAttributes = [NSAttributedStringKey.foregroundColor : UIColor.white]
我在我的SearchViewController中使用以下方法设置UISearchController:

let searchController = UISearchController(searchResultsController: nil)
    override func viewDidLoad() {
        super.viewDidLoad()
        // Setup the Search Controller

        searchController.searchResultsUpdater = self
        searchController.obscuresBackgroundDuringPresentation = false
        searchController.searchBar.placeholder = "Search Events"
        searchController.searchBar.tintColor = .white
        navigationItem.searchController = searchController
        definesPresentationContext = true
}

知道发生了什么吗?

不确定这是否是一个令人满意的答案,但它看起来像是一个iOS错误,可能与默认添加到顶部栏的半透明效果有关。顶部栏由两部分组成(导航和搜索),在向上滑动动画期间,白色线条似乎出现在导航部分的底部边缘。如果将
navigationController?.navigationBar.isTranslucent=false
添加到
viewDidLoad()
中,问题就会消失

半透明条

不透明条

为什么只有将
UINavigationController
嵌入
uitabarcontroller
时才会出现白线?
不知道:(
isTranslucent=false
充其量只是一个解决方案,但也许已经足够了。

在不放弃半透明性的情况下,一个极其肮脏的解决方案是添加一个小的“掩蔽”视图:

let rect = CGRect(x: 0, y: navigationController.navigationBar.frame.height, width: navigationController.navigationBar.frame.width, height: 1.0)
let view = UIView(frame: rect)
view.backgroundColor = /* Your matching background color */
view.autoresizingMask = [.flexibleTopMargin]
navigationController.navigationBar.addSubview(view)

将此添加到ViewDidDisplay作为一次性操作。此解决方法不会在导航转换期间完全隐藏此问题。此问题是一个bug,受此问题影响的所有人都应向Apple报告。

当底部有工具栏(navigationController.toolbar)时,此问题也会出现。禁用半透明有帮助,但会影响UI和scrollview行为。这确实是一个bug,受此问题影响的每个人都应该向苹果报告。