在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()
参考