删除导航栏的底部边框iOS7

有没有办法来删除iOS7自动显示在导航栏下的底部边框?

如果我理解你正确的尝试

[[UINavigationBar appearance] setShadowImage:[[UIImage alloc] init]]; 

这不适用于iOS7的导航半透明或不…

来自Apple文档的粘贴;

描述用于导航栏的阴影图像。 默认值是零,这对应于默认的阴影图像。 非零时,此属性表示自定义阴影图像,而不是默认值。 对于要显示的自定义阴影图像,还必须使用setBackgroundImage:forBarMetrics:方法设置自定义背景图像。 如果使用默认的背景图像,那么将使用默认的阴影图像,而不pipe该属性的值如何。

所以基本上你需要实现setBackgroundImage。 另外需要注意的是 ,在iOS7上,你不会再使用外观了,但是你现在将在viewController上下文中修改导航栏。

那是:

  [self.navigationController.navigationBar setShadowImage:[[UIImage alloc] init]]; [self.navigationController.navigationBar setBackgroundImage:[[UIImage alloc]init] forBarMetrics:UIBarMetricsDefault]; 

在我的情况下,我把它放在viewDidLoad(自定义行为可以添加为UINavigationViewController中的每个UIViewController)。

基于muffed2k回答+编程托马斯评论,这就是我用来显示UINavigationBar没有背景图像(ios5.1 / 6.0)和没有底部边框(ios7.0):

  if ([[[UIDevice currentDevice] systemVersion] floatValue] >= 6) { [[UINavigationBar appearance] setShadowImage:[[UIImage alloc] init]]; [[UINavigationBar appearance] setBackgroundImage:[[UIImage alloc] init] forBarMetrics:UIBarMetricsDefault]; }else { [[UINavigationBar appearance] setBackgroundImage:[[UIImage alloc] init] forBarMetrics:UIBarMetricsDefault]; } 

如果你使用Swift,并且遇到这个问题,可以在你的主ViewController中试试这个:

 override func viewDidLoad() { super.viewDidLoad() /// ... navigationController?.navigationBar.shadowImage = UIImage(); navigationController?.navigationBar.setBackgroundImage(UIImage(), forBarMetrics: .Default) //... } 

根据上面的@ wolffan的回答

对于我来说,当translucent设置为false时,在iOS 7上工作到9+

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

我知道这是已经接受的答案,但另一种方法是将clipToBounds设置为true。

这里是一行代码快速做到这一点

 self.navigationController?.navigationBar.clipsToBounds = true 

为我工作就像一个魅力。

为客观的目的

 self.navigationController.navigationBar.clipsToBounds = YES; 

像魅力一样工作: Swift 3.x版本

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

如果你的目标是iOS 7,而不是设置背景图片,那么这将工作:

  CGFloat navigationBarWidth = self.navigationController.navigationBar.frame.size.width; CGFloat navigationBarHeight = self.navigationController.navigationBar.frame.size.height; CGFloat statusBarHeight = [UIApplication sharedApplication].statusBarFrame.size.height; UIGraphicsBeginImageContextWithOptions(CGSizeMake(navigationBarWidth, navigationBarHeight + statusBarHeight), NO, 0.0); UIImage *blank = UIGraphicsGetImageFromCurrentImageContext(); UIGraphicsEndImageContext(); [[UINavigationBar appearance] setBackgroundImage:blank forBarMetrics:UIBarMetricsDefault]; //the following line takes away the border but only works if a background image is set (above) [[UINavigationBar appearance] setShadowImage:[[UIImage alloc] init]]; 

我从@ muffe2k的答案, 这个SOpost了 。