在2011年的技术演讲中,我看到了一场关于新的UIAppearance
协议的演讲。目前还没有太多的文档资料。我将简要总结我记得的内容,以解释我的问题来自何处:
关于UIAppearance
:
到目前为止,你必须在所有应用程序视图控制器中自定义每个导航栏(工具栏等)属性。有了新的外观属性,您只需在一个地方为应用程序中所有导航栏进行设置即可。例如:如果您想自定义导航栏背景图像,则可以像这样处理:
[[UINavigationBar appearance] setBackgroundImage:
[UIImage imageNamed:@"MyImageName"] forBarMetrics:UIBarMetricsDefault];
这将设置应用程序中所有导航栏的背景图像。 使用barMetrics
,您可以指定是否希望在横向模式下也使用该图像。
如果您只想指定在某些视图控制器中应用外观,则文档中还有一种方法可以通过指定对象所在的位置来控制:
[[UIBarButtonItem appearanceWhenContainedIn:
[ABPeoplePickerNavigationController class], nil] setTintColor:myNavBarColor];
值得一提的是,如果你有单独的自定义实例与外观设置不同,这些实例将不受外观代理的影响。
一些问题:
a)如何知道类的哪些属性适用于外观属性?例如,由于UITableView
符合UIAppearance协议,我想我可以做一些类似于
[[UITableView appearance] setBackgroundColor:mytableViewColor];
我想要操作所有表视图的背景颜色,但是我做不到!
b) 是否有一个可以通过外观属性进行操作的所有类的列表?
c) 外观定制被调用的时间点是什么时候?我希望在运行时通过外观属性进行更改,但不幸的是这些更改没有生效。