为了账号安全,请及时绑定邮箱和手机立即绑定

如何隐藏UINavigationBar 1 px底线

如何隐藏UINavigationBar 1 px底线

HUWWW 2019-07-05 16:46:41
如何隐藏UINavigationBar 1 px底线我有一个应用程序,有时需要它的导航栏,以融入内容。有人知道如何摆脱或改变这个讨厌的小酒吧的颜色吗?在下面的图片中,我说的是“根视图控制器”下面的1 px高度线。
查看完整描述

3 回答

?
qq_遁去的一_1

TA贡献1725条经验 获得超7个赞

要做到这一点,您应该设置一个自定义阴影图像。但是要显示阴影图像,还需要设置一个自定义背景图像,引用Apple的文档:

对于要显示的自定义阴影图像,还必须使用setBackoundImage(_:for:)方法设置自定义背景图像。如果使用默认背景图像,则不管此属性的值如何,都将使用默认阴影图像。

因此:

let navigationBar = navigationController!.navigationBar
navigationBar.setBackgroundImage(#imageLiteral(resourceName: "BarBackground"),
                                                        
         for: .default)navigationBar.shadowImage = UIImage()

以上是唯一的“官方”方式来隐藏它。不幸的是,它消除了酒吧的半透明。

我不想要背景图像,只想要颜色

你有这样的选择:

  1. 纯色,无半透明:

    navigationBar.barTintColor = UIColor.redColor()navigationBar.isTranslucent = falsenavigationBar.setBackgroundImage(UIImage(), 
    for: .default)navigationBar.shadowImage = UIImage()
  2. 创建充满颜色的小背景图像并使用它。

  3. 使用下面描述的‘hacky’方法。它还将保持酒吧半透明。

如何保持酒吧的半透明?

为了保持半透明,你需要另一种方法,它看起来像一个黑客,但工作良好。我们要去除的阴影是一条发际线UIImageView在下面的某个地方UINavigationBar..我们可以找到它,并在需要时隐藏/展示它。

下面的说明假设您需要只隐藏在您的一个控制器中的发际线。UINavigationController等级制度。

  1. 声明实例变量:

    private var shadowImageView: UIImageView?
  2. 查找此阴影(发际线)的Add方法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}
  3. 添加/编辑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发际线,(几乎)任何你需要隐藏的东西:)

非常感谢“狮子座娜丹”这个创意!


查看完整回答
反对 回复 2019-07-05
?
冉冉说

TA贡献1877条经验 获得超1个赞

如果您只想使用坚实的导航栏颜色,并在您的故事板中设置了此颜色,请在您的AppDelegate类以通过外观代理删除1像素边框:

[[UINavigationBar appearance] setBackgroundImage:[[UIImage alloc] init]
                                  forBarPosition:UIBarPositionAny
  barMetrics:UIBarMetricsDefault];[[UINavigationBar appearance] setShadowImage:[[UIImage alloc] init]];


查看完整回答
反对 回复 2019-07-05
  • 3 回答
  • 0 关注
  • 722 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信