如何使用* UISearchController从UINavigationBar移除1px底部边框?

时间:2019-03-14 14:14:16

标签: ios swift uinavigationbar uisearchcontroller

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

enter image description here

我已经按照this answer等建议使用了一些技巧来删除导航栏底部边框:

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

如果我没有在视图控制器的searchController上设置navigationItem,那就没问题了,没有底边框,但是只要设置了searchController,它就会出现。

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

enter image description here

我没主意

2 个答案:

答案 0 :(得分:2)

好的,我的一位同事提供了解决方案。在显示搜索栏的视图控制器的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。

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

答案 1 :(得分:0)

尝试添加

self.extendedLayoutIncludesOpaqueBars = true

self.automaticallyAdjustsScrollViewInsets = false;
self.extendedLayoutIncludesOpaqueBars = true

在ViewDidLoad方法中。对我有用