我在我想在我的 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/