iOS开发中,调用系统相册遇到的问题

2017-08-07  本文已影响420人  安静就好_
1.首先来说一下相册中常遇到的问题,那就是修改导航栏的颜色,导航返回按钮的颜色
UIImagePickerController *picker = [[UIImagePickerController alloc] init];

picker.sourceType = UIImagePickerControllerSourceTypePhotoLibrary;

//设置导航栏背景颜色

picker.navigationBar.barTintColor = [UIColor colorWithRed:20.f/255.0 green:24.0/255.0 blue:38.0/255.0 alpha:1];

//设置右侧取消按钮的字体颜色

picker.navigationBar.tintColor = [UIColor whiteColor];

2.我遇到的问题比较奇葩,那就是在调用系统相册之后,导航栏颜色变为透明,并且返回键变得很大,我需要解决的就是把取消键变小,但并没有改变按钮字体大小,只是退一步,还原系统原来字体的大小

//通过这个方法来统一设置导航栏的一些状态
UIBarButtonItem * appearance = [UIBarButtonItem appearanceWhenContainedInInstancesOfClasses:@[[UINavigationBar class]]];

 // 0和1表示点击按钮的状态      
        [appearance setTitleTextAttributes:@{NSFontAttributeName: [UIFont systemFontOfSize:18]} forState:0];
        [appearance setTitleTextAttributes:@{NSFontAttributeName: [UIFont systemFontOfSize:18]} forState:1];

3.简单介绍一下appearanceWhenContainedInInstancesOfClasses这个方法

+ (instancetype)appearance;

这个方法是统一全部改,把苹果对这个方法的注释翻译过来就知道怎么用了,我英文不行,大致意思我还是知道的。

翻译:自定义一个类的所有实例的外观,把外观修改的相关信息发送到外观的代理类。例如:修改导航栏的颜色
[[UINavigationBar appearance] setBarTintColor:myColor];
PS:在iOS7tintColor这个属性被移动到UIView,有特殊的继承行为在UIView.h文件中说明。这个继承行为可能和appearance的代理相冲突,因此tintColor这个属性不允许被用在appearance proxy。

+ (instancetype)appearanceWhenContainedIn:(nullable Class <UIAppearanceContainer>)ContainerClass, ...(废弃)
上面的方法适用于iOS5.0-9.0,在9.0之后就被下面这个方法替换掉了:
+ (instancetype)appearanceWhenContainedInInstancesOfClasses:(NSArray<Class <UIAppearanceContainer>> *)containerTypes后面的参数是一个数组,是把需要设置的类放在数组里面。
其实这两个方法上面的注释有这个方法的用法,一看就明白是怎么用。如下:
[[UINavigationBar appearanceWhenContainedInInstancesOfClasses:@[[UISplitViewController class]]] setBarTintColor:myColor];
[[UINavigationBar appearanceWhenContainedInInstancesOfClasses:@[[UITabBarController class], [UISplitViewController class]]] setBarTintColor:myTabbedNavBarColor];
这样就设置了指定类的导航栏的颜色了,很简单的。

上一篇下一篇

猜你喜欢

热点阅读