清除 iPhone 导航栏图像

Posted

技术标签:

【中文标题】清除 iPhone 导航栏图像【英文标题】:Clear iPhone Navigation Bar Image 【发布时间】:2011-03-22 19:44:19 【问题描述】:

我目前在我的 App Delegate 中使用此代码为导航栏设置自定义背景图像:

@implementation UINavigationBar (CustomImage)
   - (void)drawRect:(CGRect)rect 
      UIImage *image = [UIImage imageNamed: @"MyNavigationBar.png"];
      [image drawInRect:CGRectMake(0, 0, self.frame.size.width, self.frame.size.height)];
   
@end   

效果很好,对于我应用程序中的所有视图,我将导航栏标题设置为不显示文本(因此它不会覆盖背景图像)。

其中一个视图显示了一个模态视图控制器(确切地说是 EKEventEditViewController),导航栏中的标题显示“添加事件”,它显示在我的自定义图像之上。

我尝试了几种方法来更改标题(无济于事),但宁愿阻止自定义导航栏背景图像仅在此模式视图中显示。

有没有人知道在仍然使用所述方法设置导航栏背景图像的同时执行此操作的方法?

【问题讨论】:

【参考方案1】:

拜托,永远不要这样做......

您正在替换 UINavigationBar 中的 drawRect: 方法,该方法非常脆弱,可能会让您(和您的用户)头疼。

您的背景将始终显示在 UINavigationBar 的所有实例中,因为您已经替换了 drawRect 的实现:

没有办法替换 EKEventEditViewController 的标题。当然总有办法,但比替换drawRect的实现还要糟糕:

相反,请创建 UINavigationBar 的子类,并在需要自定义导航栏的地方使用它。

【讨论】:

+1 我可以建议***.com/questions/4593816/… 感谢您的帮助。是否有特定原因不首选此方法,或者它只是不稳定(导致崩溃等)?另外,比你 Jilouc,我以前没见过那个帖子,我可能最终会这样做...... 嗨帕特里克,因为您正在替换系统类上的方法,所以您正在阻止使用假定的实现。请不要使用 Jilouc 的 ObjC 运行时 hack,它只是以不同的方式变得脆弱......

以上是关于清除 iPhone 导航栏图像的主要内容,如果未能解决你的问题,请参考以下文章

更新自定义导航栏透明图像自动布局 Iphone X?

不透明导航栏的背景图像在 iPhone 6 上渲染不正确

iPhone - 设置应用程序宽导航栏后退按钮,不带文字

iPhone 导航栏标题文本颜色

导航栏按钮项目的图像 swift

仅在“ios 5.0”中无法在导航栏上设置图像