如何更改导航栏下方的边框颜色?

任何人都可以告诉我如何改变导航栏下面的边框?

在这里输入图像说明

我想把它从现在的黑光改变成更柔和的颜色。 感谢这里的任何帮助

我不认为有一种方法来改变导航颜色的边界颜色,而不是UINavigationBartintColor属性。

我build议你创build一个边界大小的UIView,并将其放置在导航栏下方/将其添加为子subView

 UIView *navBorder = [[UIView alloc] initWithFrame:CGRectMake(0,navigationBar.frame.size.height-1,navigationBar.frame.size.width, 1)]; // Change the frame size to suit yours // [navBorder setBackgroundColor:[UIColor colorWithWhite:200.0f/255.f alpha:0.8f]]; [navBorder setOpaque:YES]; [navigationBar addSubview:navBorder]; [navBorder release]; 

在像@Legolas这样的Swift中回答:

 if let navigationController = self.navigationController { let navigationBar = navigationController.navigationBar let navBorder: UIView = UIView(frame: CGRectMake(0, navigationBar.frame.size.height - 1, navigationBar.frame.size.width, 1)) // Set the color you want here navBorder.backgroundColor = UIColor(red: 0.19, green: 0.19, blue: 0.2, alpha: 1) navBorder.opaque = true self.navigationController?.navigationBar.addSubview(navBorder) } 

你可以放在你的UIViewControllerviewDidLoad()中。

对于iOS 7,你可以使用这个:

 [self.navigationController.navigationBar setShadowImage:[UIImage new]]; 

您也可以将子视图添加到导航栏中

以下代码将在导航栏下方添加一个4像素深蓝色边框

 UINavigationBar* navBar = self.navigationController.navigationBar; int borderSize = 4; UIView *navBorder = [[UIView alloc] initWithFrame:CGRectMake(0,navBar.frame.size.height-borderSize,navBar.frame.size.width, borderSize)]; [navBorder setBackgroundColor:[UIColor blueColor]]; [self.navigationController.navigationBar addSubview:navBorder]; 

我在之前的答案中发现了一些问题:

  • 如果添加子视图:旋转设备后,边框将不再具有正确的框架
  • 如果将shadowImage设置为nil,则无法自定义导航条的阴影。

解决这个问题的一种方法是使用自动布局:

 extension UINavigationBar { func setBottomBorderColor(color: UIColor, height: CGFloat) -> UIView { let bottomBorderView = UIView(frame: CGRectZero) bottomBorderView.translatesAutoresizingMaskIntoConstraints = false bottomBorderView.backgroundColor = color self.addSubview(bottomBorderView) let views = ["border": bottomBorderView] self.addConstraints(NSLayoutConstraint.constraintsWithVisualFormat("H:|[border]|", options: [], metrics: nil, views: views)) self.addConstraint(NSLayoutConstraint(item: bottomBorderView, attribute: .Height, relatedBy: .Equal, toItem: nil, attribute: .NotAnAttribute, multiplier: 1.0, constant: height)) self.addConstraint(NSLayoutConstraint(item: bottomBorderView, attribute: .Bottom, relatedBy: .Equal, toItem: self, attribute: .Bottom, multiplier: 1.0, constant: height)) return bottomBorderView } } 

我之所以返回这个边界,是因为在旋转的时候,你会在navigation bar的中间看到它,所以我在旋转过程中隐藏它。

尽pipenavigationBar是UINavigationController的只读属性,但您可以通过“setValue:forKey:”来避免此限制。 这个方法被批准了5个成功提交给AppStore的应用程序。

您可以inheritanceUINavigationBar并根据需要更改drawRect:方法。 例如,

 @implementation CustomNavigationBar - (void) drawRect:(CGRect)rect { [super drawRect:rect]; UIImage *backgroundImage = ImageFromColor(WANTED_COLOR); [backgroundImage drawInRect:rect]; } 

你可以inheritanceUINavigationController并更改initWithRootViewController之后:

 - (id) initWithRootViewController:(UIViewController *)rootViewController { self = [super initWithRootViewController:rootViewController]; if (self) { CustomNavigationBar *navBar = [CustomNavigationBar new]; [self setValue:navBar forKey:@"navigationBar"]; } return self; } 

也可以通过为UINavigationController设置Category并为initWithRootViewController实现方法调整来改变这种方法:

PS昨天我的新应用程序出现在AppStore没有任何问题,这种方法。