我有一个应用程序,有时需要它的导航栏融入内容。

有人知道怎么去掉或者改变这个烦人的小条的颜色吗?

在下图中,我说的是根视图控制器下面1px的高度线


当前回答

[tabviewController.view setBackgroundColor:[UIColor blackColor]];

对我来说[UIColor blackColor]可能是你的背景色, tabviewController是你的UITabBarController,如果你正在使用它!

其他回答

对于iOS 13:

使用.shadowColor属性

如果此属性为nil或包含透明颜色,则该栏不显示阴影

例如:

let navigationBar = navigationController?.navigationBar
let navigationBarAppearance = UINavigationBarAppearance()
navigationBarAppearance.shadowColor = .clear
navigationBar?.scrollEdgeAppearance = navigationBarAppearance

对于iOS 12及以下版本:

为此,您应该设置一个自定义阴影图像。但是为了显示阴影图像,你还需要设置一个自定义背景图像,引用自苹果的文档:

要显示自定义阴影图像,必须有自定义背景图像 也可以使用setBackgroundImage(_:for:)方法进行设置。如果默认 使用背景图像,然后将使用默认阴影图像 不管这个属性的值。

So:

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

以上是唯一的“官方”隐藏方法。不幸的是,它消除了杆的半透明。

我不需要背景图像,只是颜色##

你有这些选择:

纯色,无半透明: navigationBar。barTintColor = uiccolor . redcolor () navigationBar。isstranslucent = false navigationBar.setBackgroundImage(UIImage(), for: .default) navigationBar。shadowImage = UIImage() 创建小背景图像充满颜色和使用它。 使用下面描述的“hack”方法。它也将保持酒吧半透明。

如何保持酒吧的半透明?# #

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

下面的说明假设你只需要在UINavigationController层次结构的一个控制器中隐藏发际线。

Declare instance variable: private var shadowImageView: UIImageView? Add method which finds this shadow (hairline) 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 } Add/edit viewWillAppear/viewWillDisappear methods: 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发际线, 以及(几乎)任何你需要隐藏的东西:)

非常感谢@Leo Natan的原创想法!

在子视图中找到发际线的一个很好的简短Swift函数是:

 func findHairLineInImageViewUnder(view view: UIView) -> UIImageView? {
    if let hairLineView = view as? UIImageView where hairLineView.bounds.size.height <= 1.0 {
        return hairLineView
    }

    if let hairLineView = view.subviews.flatMap({self.findHairLineInImageViewUnder(view: $0)}).first {
      return hairLineView
    }

    return nil
}

斯威夫特4 //隐藏导航栏阴影线

navigationController?.navigationBar.shadowImage = UIImage()

编写自己的初始化式:D

import Foundation
import UIKit

extension UINavigationController {
    convenience init(rootViewController : UIViewController, hidesShadow : Bool) {
        self.init(rootViewController : rootViewController)
        self.navigationBar.setValue(hidesShadow, forKey: "hidesShadow")
        if hidesShadow {
            self.extendedLayoutIncludesOpaqueBars = true
            self.navigationBar.isTranslucent = false 
        }
    }
}

这可能听起来很愚蠢,但这个发际线只在viewController视图的背景色被设置为任何颜色时出现,除了白色。得知这个事实我很震惊。

如果你想让它毫不费力地消失只要设置控制器视图背景色为WHITE color。