我有一个应用程序,有时需要其导航栏与内容融合。
有谁知道如何摆脱或改变这个烦人的小酒吧的颜色?
在下面的图片中,我遇到的情况-我正在谈论“ Root View Controller”下方的1px高度线
使用.shadowColor物业
.shadowColor
如果此属性为nil或包含纯色,则该条不显示阴影
例如:
let navigationBar = navigationController?.navigationBar let navigationBarAppearence = UINavigationBarAppearance() navigationBarAppearence.shadowColor = .clear navigationBar?.scrollEdgeAppearance = navigationBarAppearence
为此,您应该设置自定义阴影图像。但是要显示阴影图像,您还需要设置自定义背景图像,请引用Apple文档中的内容:
为了显示自定义阴影图像,还必须使用setBackgroundImage(_:for :)方法设置自定义背景图像。如果使用默认背景图像,则无论此属性的值如何,都将使用默认阴影图像。
所以:
let navigationBar = navigationController!.navigationBar navigationBar.setBackgroundImage(#imageLiteral(resourceName: "BarBackground"), for: .default) navigationBar.shadowImage = UIImage()
上面是隐藏它的唯一“官方”方式。 不幸的是,它消除了bar的半透明性。
您有以下选择:
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
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的初衷!