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

drawRect on a UINavigationBar subclass makes the status bar go black

我和线程 here 有同样的问题。我可以通过将文本设为白色来设法使状态栏可见,但这不是我的目标。我还想在栏的顶部着色,就像所有导航栏一样。我已经能够通过在 layoutSubviews 下添加我想要的形状来实现这一点,但是这样你就无法交互或看到 UINavigationItem。代码:

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

这是结果:

这是可以用drawRect实现的bast:

如果您在 layoutSubviews 下执行此操作,则会发生这种情况:

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

首先,将导航栏设置为不可见:

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 和 return 导航栏默认视图消失:

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