我有一个应用程序,有时需要它的导航栏与内容融合。
有谁知道如何摆脱这个烦人的小酒吧或改变它的颜色?
在下图中我的情况 - 我说的是“根视图控制器”下方的这条 1px 高度线
使用.shadowColor物业
.shadowColor
如果此属性为 nil 或包含清除颜色,则条形图不显示阴影
例如:
let navigationBar = navigationController?.navigationBar let navigationBarAppearance = UINavigationBarAppearance() navigationBarAppearance.shadowColor = .clear navigationBar?.scrollEdgeAppearance = navigationBarAppearance
为此,您应该设置自定义阴影图像。但是要显示阴影图像,您还需要设置自定义背景图像,引用 Apple 的文档:
要显示自定义阴影图像,还必须使用 setBackgroundImage(_:for:) 方法设置自定义背景图像。如果使用默认背景图像,则无论此属性的值如何,都将使用默认阴影图像。
所以:
let navigationBar = navigationController!.navigationBar navigationBar.setBackgroundImage(#imageLiteral(resourceName: "BarBackground"), for: .default) navigationBar.shadowImage = UIImage()
以上是隐藏它的唯一“官方”方式。 不幸的是,它消除了酒吧的半透明性。
你有这些选择:
纯色,无半透明:
navigationBar.barTintColor = UIColor.redColor()
navigationBar.isTranslucent = false navigationBar.setBackgroundImage(UIImage(), for: .default) navigationBar.shadowImage = UIImage()
创建填充颜色的小背景图像并使用它。
使用下面描述的“hacky”方法。它也将保持酒吧半透明。
为了保持半透明,你需要另一种方法,它看起来像一个 hack,但效果很好。我们试图移除的阴影是UIImageView下方某处的细线UINavigationBar。我们可以找到它并在需要时隐藏/显示它。
UIImageView
UINavigationBar
下面的说明假设您只需要在UINavigationController层次结构的一个控制器中隐藏细线。
UINavigationController
声明实例变量:
private var shadowImageView: UIImageView?
添加找到这个阴影(细线)的方法UIImageView:
UIImageView:
private func findShadowImage(under view: UIView) -> UIImageView? { if view is UIImageView && view.bounds.size.height <= 1 { return (view as! UIImageView) } for subview in view.subviews { if let imageView = findShadowImage(under: subview) { return imageView } } return nil
}
添加/编辑viewWillAppear/viewWillDisappear方法:
viewWillAppear/viewWillDisappear
override func viewWillAppear(_ animated: Bool) { super.viewWillAppear(animated) if shadowImageView == nil { shadowImageView = findShadowImage(under: navigationController!.navigationBar) } shadowImageView?.isHidden = true
override func viewWillDisappear(_ animated: Bool) { super.viewWillDisappear(animated)
shadowImageView?.isHidden = false
同样的方法也应该适用于UISearchBar发际线,以及(几乎)任何你需要隐藏的东西:)
UISearchBar
非常感谢@Leo Natan 的原创想法!