ios - 如何使用 UISearchController *从 UINavigationBar 中删除 1px 底部边框?

标签 ios swift uinavigationbar uisearchcontroller

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

enter image description here

我已经按照 this answer 中的建议使用了删除导航栏底部边框的技巧。和许多其他人:

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

如果我不在我的 View Controller 的 navigationItem 上设置 searchController 没问题,没有底部边框,但是一旦我设置了 searchController 它出现了。

即使是在导航栏 View 层次结构中寻找 1px UIImageView 的肮脏 hacks 也不起作用,因为看起来这个 View 位于层次结构的单独树中。这是下面以蓝色突出显示的 UIImageView:

enter image description here

我没有想法😕

最佳答案

好的,我的一个同事提供了一个解决方案。在显示搜索栏的 View Controller 中的 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 用于搜索栏的确切 View 层次结构,并且可能会停止与任何 future 版本的 iOS 一起工作(它在 iOS 12 上工作)。您可以通过在 superview subview 中搜索 1px 高度的 UIImageView 来使其更具弹性,但这仍然是一个 hack。

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

关于ios - 如何使用 UISearchController *从 UINavigationBar 中删除 1px 底部边框?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55164743/

相关文章:

ios - 在 iOS 7 中禁用 Core Data 中的 iCloud(也称为将持久存储文件迁移到本地)

swift - 有更好的方法来使用这个 Switch func(Swift-Spritekit 项目)

ios - UITableView、UISwipeActionsConfiguration、UIContextualAction - pullView 不在 View 层次结构中。这是一个 UIKit 错误

ios - Swift编译器错误

swift - XCode swift : View Controller Navigation Area does not display correctly?

ios - 尝试使用 Swift 使 rightBarButton 消失后出现

ios - 如何判断 iOS 设备是否具有 GPS?

ios - NSOperation 没有被正确取消

objective-c - 堆叠 presentViewController 后 statusBarFrame = 0

ios - 如何访问以编程方式创建的按钮?