【问题标题】:drawRect on a UINavigationBar subclass makes the status bar go blackUINavigationBar 子类上的 drawRect 使状态栏变黑
【发布时间】:2016-08-08 11:15:59
【问题描述】:

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

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

这是结果:

这是用drawRect可以实现的韧带:

如果你在 layoutSubviews 下这样做,就会发生这种情况:

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

【问题讨论】:

  • 你的意思是你想让它看起来像你的第三张照片,但按钮不显示?
  • @Tj3n 是的,但这不仅仅是我想要的颜色,否则我会使用 tint color 属性。该栏是一个适当的草图(带有星形和多种颜色)。这是因为 layoutsubviews 工作在 drawRect 之上,因为视图阻塞了所有可见元素(按钮、主屏幕中的标题、所有内容)。
  • 您实际上可以隐藏navigationBar 背景、阴影和颜色以清除颜色,然后在该不可见导航栏下方添加您的自定义视图,我正在为自定义导航栏执行此操作:我可以快速回答如果你需要,否则谷歌很容易
  • @Tj3n 当然可以,我也可以使用 Swift,我想看看答案来看看这个:)

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


【解决方案1】:

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

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 并在视图消失时将导航栏恢复为默认值:

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

【讨论】:

  • 非常感谢,这让我摆脱了很多挫折! :)
猜你喜欢
  • 2014-05-27
  • 2015-01-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-07-22
  • 1970-01-01
相关资源
最近更新 更多