在 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) 在什么时候调用外观定制?我希望在运行时对外观属性进行更改,但不幸的是,这些更改没有发生。