UINavigationBar 外观 addSubview 在 iOS 8 中不起作用

Posted

技术标签:

【中文标题】UINavigationBar 外观 addSubview 在 iOS 8 中不起作用【英文标题】:UINavigationBar appearance addSubview not working in iOS 8 【发布时间】:2014-10-16 20:58:58 【问题描述】:

我想向导航栏添加图像。我用过

    [[UINavigationBar appearance] addSubview:logoImage];

它似乎适用于 ios 7,但不适用于 iOS 8,谁能解释为什么会发生这种情况,以及在 iOS 8 中在导航栏上添加 imageView 的替代方法是什么?

【问题讨论】:

【参考方案1】:

调用[[UINavigationBar appearance] 会返回接收者类的外观代理。 addSubview: 方法未标记为 UI_APPEARANCE_SELECTOR。 UIAppearance 的代理方法的一个主要缺点是很难知道哪些选择器是兼容的。

这篇文章解释得好一点:http://nshipster.com/uiappearance/ 这篇文章中的这个链接https://gist.github.com/mattt/5135521 显示了在 iOS 7 中标记为 UI_APPEARANCE_SELECTOR 的方法。

您应该继承UINavigationBar 并调用[[UINavigationController alloc] initWithNavigationBarClass:toolBarClass:]。将您的新导航栏子类作为第一个参数传递,将 nil 作为第二个参数传递以使用标准 UIToolbar。在您的子类中,像您一样添加图像。

另一种可行的方法是获取导航控制器的导航栏并在其中添加子视图,如下所示: [self.navigationController.navigationBar addSubview:logoImage]。这可能有效,但创建自己的子类肯定会给您更大的灵活性。

【讨论】:

非常感谢,我需要快速修复,[self.navigationController.navigationBar addSubview:logoImage] 工作得很好,所以没有子类化 UINavigationBar

以上是关于UINavigationBar 外观 addSubview 在 iOS 8 中不起作用的主要内容,如果未能解决你的问题,请参考以下文章

自定义 UINavigationBar 外观以在 CNContactPickerViewController 中显示

在iOS 11中忽略设置UINavigationBar外观

UINavigationBar 外观 setBackgroundImage 隐藏状态栏

UINavigationbar 通过外观设置阴影不起作用

UINavigationBar 外观刷新?

为所有导航栏 (UINavigationBar) iOS 5.1+ 设置按钮和外观