使用彩色导航栏时,SearchBar中会出现白线

时间:2018-02-06 12:43:41

标签: swift uinavigationcontroller uitabbarcontroller uisearchbar

点击SearchBar时,我得到多条白线。

enter image description here

使用 TabBarController 和彩色条 NavigationController 时会发生这种情况,但

  • 仅使用NavigationController
  • 时有效
  • TabBarController和NavigationController同时使用默认颜色

enter image description here

我使用以下代码行在 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
}

知道发生了什么事吗?

2 个答案:

答案 0 :(得分:3)

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

Translucent bar 半透明条

Opaque bar 不透明栏

为什么只有在UINavigationController中嵌入UITabBarController时才会显示白线?不知道:( isTranslucent = false事情充其量是一种解决方法,但也许就足够了。

答案 1 :(得分:0)

一个非常肮脏的解决方法是不增加透明度,而是添加一个小的“蒙版”视图:

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)

将此操作添加到viewDidAppear中,这是一次性操作。此解决方法不能完全隐藏导航过渡期间的问题。此问题是一个受此问题影响的人应向Apple报告的错误。