objective-c - 包含在多个类中时的 iOS 6 外观

标签 objective-c xcode ios6 uiappearance

我在我想在我的 iOS 6 应用程序中自定义的某些 UI 元素上使用 appearanceWhenContainedIn 方法。我发现的问题是,如果我尝试提供多个容器类,则不会应用我的任何定制,如下所示:

// Works neither for toolbar nor navbar items
[UIBarButtonItem appearanceWhenContainedIn:[UINavigationBar class], [UIToolbar class], nil]

// Works fine (but only for navbar items, obviously)
[UIBarButtonItem appearanceWhenContainedIn:[UINavigationBar class], nil]

官方文档说这个方法的参数可以是多个类的以 nil 结尾的列表,但在我的例子中它从来没有按应有的方式工作。我在这里遗漏了什么吗?

最佳答案

来自文档:

appearanceWhenContainedIn:

...

The appearance proxy for the receiver in a given containment hierarchy.

这实际上意味着 nil-terminated 列表定义的不是 UIBarButtonItem 的容器类列表,而是从上到下的容器层次结构,所以

[UIBarButtonItem appearanceWhenContainedIn:[UINavigationBar class], [UIToolbar class], nil]

返回 UINavigationBar 内的 UIBarButtonItem 的外观代理,而 UINavigationBar 又位于 UIToolbar 内。

[[UIBarButtonItem appearanceWhenContainedIn:[UIToolbar class],[ViewController class], nil] setTintColor:[UIColor redColor]];

为 ViewController 类中的任何 UIToolBar 中的 UIBarButtonItems 设置红色。

因此,要分别设置 UINavigationBar 和 UIToolBar 的外观,您需要两次单独调用 +appearanceWhenContainedIn: 方法

关于objective-c - 包含在多个类中时的 iOS 6 外观,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12592025/

相关文章:

ios - CATextlayer 更改 FONT 的大小以适应框架

ios - XIB socket 属性何时设置?

iphone - 如何在 IOS6 中旋转单个 View Controller

ios - 如何使用 SWRevealViewController 显示调整后的侧边栏?

objective-c - 将 NSString 解析为 Double

xcode - 使用 react-native-safari-view 时,iOS URL 类型不适用于 React Native

iphone - Xcode 4.5 : NSLayoutConstraint issue in iphone 5. 1 模拟器

xcode - App Store 作为 iOS 6 中的模态视图

objective-c - 两个线程调用一个函数 > 局部变量访问需要同步吗?

Objective-C 下载流畅的流媒体视频