使用彩色导航栏时,搜索栏出现白线问题

5
当我在搜索栏中点击时,出现多条白线。

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个回答

3
不确定这是否是一个令人满意的答案,但看起来像是iOS的一个bug,这可能与默认添加到顶部栏的半透明效果有关。顶部栏由两个部分(导航和搜索)组成,在向上滑动的动画期间似乎白线出现在导航部分的底边缘。如果在viewDidLoad()中添加navigationController?.navigationBar.isTranslucent = false,问题就会消失。 半透明栏 半透明栏 不透明栏 不透明栏 为什么只有在将UINavigationController嵌入UITabBarController时才出现白线? 不知道 :( isTranslucent = false只是一种权宜之计,但也许已经足够了。

1
当您在底部拥有一个工具栏时(navigationController.toolbar),也会出现此问题。禁用透明度可以解决问题,但会对UI和滚动视图行为产生影响。这确实是一个错误,应该由受此问题影响的每个人向苹果报告。 - Ely

1
一个非常脏的解决方法,可以在不放弃半透明的情况下添加一个小的“遮罩”视图:
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中作为一次性操作。这个解决方法并不能完全隐藏在导航转换期间出现的问题。这个问题是一个bug,应该由所有受影响的人向苹果报告。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接