如何使用 UISearchController *从 UINavigationBar 中删除 1px 底部边框?
How to remove 1px bottom border from UINavigationBar *with* a UISearchController?
我有一个包含 UISearchController
的导航栏,但我找不到摆脱导航栏下方 1px 底部边框的方法:
我已经按照 this answer 和许多其他人的建议使用了删除导航栏底部边框的技巧:
navigationBar.isTranslucent = false
navigationBar.setBackgroundImage(aTransparentImage, for: .default)
navigationBar.shadowImage = nil
如果我不在我的视图控制器的 navigationItem
上设置 searchController
没问题,没有底部边框,但是一旦我设置了 searchController
它出现。
即使是在导航栏视图层次结构中寻找 1px UIImageView
的肮脏技巧也不起作用,因为该视图似乎位于层次结构的单独树中。这是下面用蓝色突出显示的 UIImageView
:
我没主意了
好的,我的一个同事提供了一个解决方案。在显示搜索栏的视图控制器中的 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。
但到目前为止,这是我发现的唯一可行的解决方案。
尝试添加
self.extendedLayoutIncludesOpaqueBars = true
或
self.automaticallyAdjustsScrollViewInsets = false;
self.extendedLayoutIncludesOpaqueBars = true
在 ViewDidLoad 方法中。它对我有用
我有一个包含 UISearchController
的导航栏,但我找不到摆脱导航栏下方 1px 底部边框的方法:
我已经按照 this answer 和许多其他人的建议使用了删除导航栏底部边框的技巧:
navigationBar.isTranslucent = false
navigationBar.setBackgroundImage(aTransparentImage, for: .default)
navigationBar.shadowImage = nil
如果我不在我的视图控制器的 navigationItem
上设置 searchController
没问题,没有底部边框,但是一旦我设置了 searchController
它出现。
即使是在导航栏视图层次结构中寻找 1px UIImageView
的肮脏技巧也不起作用,因为该视图似乎位于层次结构的单独树中。这是下面用蓝色突出显示的 UIImageView
:
我没主意了
好的,我的一个同事提供了一个解决方案。在显示搜索栏的视图控制器中的 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。
但到目前为止,这是我发现的唯一可行的解决方案。
尝试添加
self.extendedLayoutIncludesOpaqueBars = true
或
self.automaticallyAdjustsScrollViewInsets = false;
self.extendedLayoutIncludesOpaqueBars = true
在 ViewDidLoad 方法中。它对我有用