【问题标题】:How to remove 1px bottom border from UINavigationBar *with* a UISearchController?如何从 UINavigationBar *with* UISearchController 中删除 1px 底部边框?
【发布时间】:2019-08-05 11:29:57
【问题描述】:

我有一个包含UISearchController 的导航栏,但我找不到摆脱导航栏下方 1px 底部边框的方法:

我已经在使用this answer 和许多其他人建议的移除导航栏底部边框的技巧:

navigationBar.isTranslucent = false
navigationBar.setBackgroundImage(aTransparentImage, for: .default)
navigationBar.shadowImage = nil

如果我没有在我的视图控制器的navigationItem 上设置searchController,那很好,没有底部边框,但是一旦我设置了searchController,它就会出现。

即使在导航栏视图层次结构中寻找 1px UIImageView 的肮脏黑客也不起作用,因为该视图似乎位于层次结构的单独树中。这是下面蓝色突出显示的UIImageView

我没有想法????

【问题讨论】:

    标签: ios swift uinavigationbar uisearchcontroller


    【解决方案1】:

    好的,我的一位同事提供了解决方案。在显示搜索栏的视图控制器中的viewWillAppear 中:

    if let imageView = navigationItem.searchController?
        .searchBar.superview?
        .subviews.first?
        .subviews.last as? UIImageView,
        imageView.frame.height * UIScreen.main.scale == 1.0 {
        imageView.isHidden = true
    }
    

    这显然高度依赖于 UIKit 用于搜索栏的确切视图层次结构,并且可能会停止与任何未来的 iOS 版本一起使用(它适用于 iOS 12)。您可以通过在 superview 子视图中搜索 1px 高度 UIImageView 来使其更具弹性,但它仍然是一个 hack。

    但到目前为止,这是我发现的唯一可行的解​​决方案。

    【讨论】:

    • 遇到了同样的问题,你还有什么更好的办法吗?
    【解决方案2】:

    尝试添加

    self.extendedLayoutIncludesOpaqueBars = true
    

    self.automaticallyAdjustsScrollViewInsets = false;
    self.extendedLayoutIncludesOpaqueBars = true
    

    在 ViewDidLoad 方法中。它对我有用

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-01-31
      • 2013-09-05
      • 2023-03-26
      • 1970-01-01
      • 2014-04-08
      • 2013-10-14
      • 2017-10-22
      相关资源
      最近更新 更多