如何更改导航栏下方的边框颜色?
任何人都可以告诉我如何改变导航栏下面的边框?
我想把它从现在的黑光改变成更柔和的颜色。 感谢这里的任何帮助
我不认为有一种方法来改变导航颜色的边界颜色,而不是UINavigationBar
的tintColor
属性。
我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) }
你可以放在你的UIViewController
的viewDidLoad()
中。
对于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没有任何问题,这种方法。