在swift中删除navigationBar中的边框

我一直在试图删除导航栏边界没有运气。 我已经研究过,人们似乎告诉把shadowImage和BackgroundImage设置为零,但是这对我来说不起作用。

我的代码

self.navigationController?.navigationBar.barTintColor = UIColor(rgba: "#4a5866") self.navigationController?.navigationBar.setBackgroundImage(UIImage(named: ""), forBarMetrics: UIBarMetrics.Default) self.navigationController?.navigationBar.shadowImage = UIImage(named: "") 

插图:

在这里输入图像说明

麻烦在于这两行:

 self.navigationController?.navigationBar.setBackgroundImage(UIImage(named: ""), forBarMetrics: UIBarMetrics.Default) self.navigationController?.navigationBar.shadowImage = UIImage(named: "") 

由于你没有一个没有名字的图像, UIImage(named: "")返回nil ,这意味着默认的行为踢在:

非零时,自定义阴影图像显示,而不是默认阴影图像。 要显示自定义阴影,还必须使用-setBackgroundImage:forBarMetrics(如果使用默认背景图像,将使用默认阴影图像)设置自定义背景图像。

您需要一个真正的空图像,所以只需使用UIImage()初始化:

 self.navigationController?.navigationBar.setBackgroundImage(UIImage(), forBarMetrics: UIBarMetrics.Default) self.navigationController?.navigationBar.shadowImage = UIImage() 

这将完全删除阴影图像

 for parent in self.navigationController!.navigationBar.subviews { for childView in parent.subviews { if(childView is UIImageView) { childView.removeFromSuperview() } } } 

用Swift 2你可以这样做:

AppDelegate文件

里面的func应用程序(…,didFinishLaunchingWithOptions launchOptions:…)

 UINavigationBar.appearance().shadowImage = UIImage() UINavigationBar.appearance().setBackgroundImage(UIImage(), forBarMetrics: .Default) 

对于Swift 3:

 UINavigationBar.appearance().shadowImage = UIImage() UINavigationBar.appearance().setBackgroundImage(UIImage(), for: .default) 

在设置色调之前将barStyle设置为barStyle

 self.navigationController?.navigationBar.translucent = false self.navigationController?.navigationBar.barStyle = .Black self.navigationController?.navigationBar.barTintColor = UIColor.blueColor() 

Luca Davanzo的回答非常好,但在iOS 10中无法正常工作。我将其更改为在iOS 10及更低版本中工作。

 for parent in navigationController!.view.subviews { for child in parent.subviews { for view in child.subviews { if view is UIImageView && view.frame.height == 0.5 { view.alpha = 0 } } } } 

您也可以扩展UINavigationController并将其称为此。 removeFromSuperview()将不能在iOS 10上工作,所以我只是将alpha设置为0,所以这个调用在任何地方都是兼容的。

只需在UINavigationBar的扩展名中写入

  extension UINavigationBar { func shouldRemoveShadow(_ value: Bool) -> Void { if value { self.setValue(true, forKey: "hidesShadow") } else { self.setValue(false, forKey: "hidesShadow") } } } 

而在你的viewController ..

  override func viewWillAppear(_ animated: Bool) { super.viewWillAppear(true) self.navigationController?.navigationBar.shouldRemoveShadow(true) } 

并取消任何viewController撤消,只是通过'假'..

为迅速3

viewDidLoad方法中

 navigationController?.navigationBar.setBackgroundImage(UIImage(), for: .default) navigationController?.navigationBar.shadowImage = UIImage() 

如果你想在不改变背景颜色的情况下这样做:

 // Remove the border ImageView from the NavigationBar background func hideBottomBorder() { for view in navigationBar.subviews.filter({ NSStringFromClass($0.dynamicType) == "_UINavigationBarBackground" }) as [UIView] { if let imageView = view.subviews.filter({ $0 is UIImageView }).first as? UIImageView { imageView.removeFromSuperview() } } } 

注意:这可能会在生产应用程序中崩溃。 显然NavigationBar不喜欢它的视图消失

试试这个代码从Swift 3的 UINavigationBar中移除边界:

 UINavigationBar.appearance().shadowImage = UIImage() UINavigationBar.appearance().setBackgroundImage(UIImage(), for: .default) UINavigationBar.appearance().isTranslucent = false 

边界线是一个UIImageView和删除子视图是一个imageView将删除与UIImageView的barButtonItems。 下面的代码将帮助您删除它。 希望这能帮助那些遇到像我这样的问题的人。

 for parent in self.navigationController!.navigationBar.subviews { for childView in parent.subviews { if childView.frame.height == 0.5 { childView.removeFromSuperview() } } } 

边界UIImageView只有0.5高,所以这段代码只删除。

对于swift3你应该写一点不同的方法:

  self.navigationController?.navigationBar.setBackgroundImage(UIImage(), for: UIBarMetrics.default) self.navigationController?.navigationBar.shadowImage = UIImage() 

AppDelegate中 ,这已经全局改变了NavBar的格式,并删除了底线/边界:

  func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool { UINavigationBar.appearance().setBackgroundImage(UIImage(), forBarPosition: UIBarPosition.Any, barMetrics: UIBarMetrics.Default) UINavigationBar.appearance().shadowImage = UIImage() UINavigationBar.appearance().tintColor = UIColor.whiteColor() UINavigationBar.appearance().barTintColor = UIColor.redColor() UINavigationBar.appearance().translucent = false UINavigationBar.appearance().clipsToBounds = false //UINavigationBar.appearance().backgroundColor = UIColor.redColor() UINavigationBar.appearance().titleTextAttributes = [NSFontAttributeName : (UIFont(name: "FONT NAME", size: 18))!, NSForegroundColorAttributeName: UIColor.whiteColor()] } 

没有设法在一个特定的风险投资公司实施任何不同的东西,但这将有助于90%的人

这是内特·库克迅速答复的答案

  self.navigationController?.navigationBar.setBackgroundImage(UIImage(), for: UIBarMetrics.default) self.navigationController?.navigationBar.shadowImage = UIImage() 

只有这对我有效,

 self.navigationController?.navigationBar.shadowImage = UIImage() 

参考