【问题标题】:White lines appear in SearchBar when using colored navigation bar使用彩色导航栏时,SearchBar 中出现白线
【发布时间】:2018-02-06 12:43:40
【问题描述】:

单击 SearchBar 时出现多条白线。

同时使用 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
}

知道发生了什么吗?

【问题讨论】:

    标签: swift uinavigationcontroller uitabbarcontroller uisearchbar


    【解决方案1】:

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

    半透明条

    不透明条

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

    【讨论】:

    • 当你在底部有一个工具栏(navigationController.toolbar)时也会出现这个问题。禁用半透明会有所帮助,但会影响 UI 和滚动视图行为。这确实是一个错误,受此问题影响的每个人都应该向 Apple 报告。
    【解决方案2】:

    在不放弃半透明的情况下,一个非常肮脏的解决方法是添加一个小的“遮罩”视图:

    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 报告。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-04-28
      • 1970-01-01
      • 2011-08-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多