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 中显示