UINavigationBar子类上的drawRect使状态栏变黑

时间:2016-08-08 11:15:59

标签: ios objective-c uinavigationbar core-graphics drawrect

我遇到与线程here相同的问题。我可以通过将文本设为白色来设置状态栏可见,但这不是我的目标。我也想在酒吧的顶部上色,就像所有的导航栏一样。我已经能够通过在layoutSubviews下添加我想要的视图形状来实现这一点,但是这样您就无法进行交互或查看UINavigationItem。代码:

- (void)drawRect:(CGRect)rect {
[super drawRect:rect];
CGContextRef context = UIGraphicsGetCurrentContext();
[[UIColor yellowColor] setFill];
UIRectFill(rect);

结果如下:

enter image description here

这是使用drawRect可以实现的韧皮:

enter image description here

如果你在layoutSubviews下执行此操作:

enter image description here

如您所见,后面的文字,箭头都丢失了。所以我真的在寻找一种让drawRect工作的方法!在此先感谢您的帮助!

1 个答案:

答案 0 :(得分:1)

首先,使用以下命令将navBar设置为隐藏:

navController.navigationBar.translucent = true
navController.navigationBar.setBackgroundImage(UIImage(), forBarMetrics: .Default)
navController.navigationBar.shadowImage = UIImage()
navController.navigationBar.backgroundColor = UIColor.clearColor()

在storyboard或xib中创建一个视图并在VC中创建属性,然后将其添加到:

navController.view.insertSubview(navBarView, belowSubview: (navigationController?.navigationBar)!)

之后,您的子视图应显示在条形按钮后面,它可以与您的自定义navBarView一起正常工作,但请记住删除navBarView并在视图消失时将navBar恢复为默认值:

navController.navigationBar.translucent     = false
navController.navigationBar.shadowImage     = nil
navController.navigationBar.setBackgroundImage(nil, forBarMetrics: .Default)
navController.navigationBar.backgroundColor = UIColor.whiteColor()