关于Appearance的一些性质:
1.只要遵守了UIAppearance协议,还要实现这个方法
2.哪些属性可以通过appearance设置,只有被UI_APPEARANCE_SELECTOR修饰的属性
3.appearance:只能在控件显示之前设置,才能有作用
4.如果view大规模变化的话,可以使用appearance例如:夜间模式
可能遇到的坑:
比方说 UINavigationBar *bar = [UINavigationBar appearance]用来设置项目中关于navigation bar的一些操作,殊不知,如果我们在项目中调用到了通讯录的话,通讯录也是有navbar的,那我们之前设置的内容可能就会影响到它,所以如果涉及到其他的navbar就不能单纯的用appearance,为了保险,可以采取以下方法:
根据IOS的系统不同的两套方式,也是以navbar为例
#define IOS9 ([[[UIDevice currentDevice] systemVersion] floatValue] >= 9.0 ? YES:NO)
//设置导航栏主题
UINavigationBar *navBar = [UINavigationBar appearance];
if(IOS9)
{
navBar = [UINavigationBar appearanceWhenContainedInInstancesOfClasses:@[[self class]]];
}else
{
navBar = [UINavigationBar appearanceWhenContainedIn:self, nil];
}