更改CNContactPickerViewController

时间:2017-07-07 17:32:29

标签: ios objective-c

我有一个ContactPicker,可以控制项目中其他ViewControllers的颜色但无法控制ContactsPickers 状态栏颜色。

我的目标是让状态栏文字为白色。

- (IBAction)btnSearch:(id)sender {

  //global statusbar color
  UINavigationBar.appearance.translucent = NO;
  UINavigationBar.appearance.barStyle = UIBarStyleBlack;

  CNContactPickerViewController *contactPicker = [CNContactPickerViewController new];

  //local statusbar color
  contactPicker.navigationController.navigationBar.translucent = NO;
  contactPicker.navigationController.navigationBar.barStyle = UIBarStyleBlack;

  contactPicker.delegate = self;

  contactPicker.displayedPropertyKeys = @[CNContactNamePrefixKey, CNContactPhoneNumbersKey];

  [self presentViewController:contactPicker animated:NO completion:nil];

}

我也在Xcode文档中找到了这个: 应用程序默认使用基于视图控制器的新状态栏管理系统。要退出此选项,请将UIViewControllerBasedStatusBarAppearance键的值NO添加到Info.plist。

当我有一个全局属性不能控制每个视图时,我可以管理 使ContactPicker状态栏具有白色。

1 个答案:

答案 0 :(得分:1)

我一直在尝试各种不适合我的方法 情况:

<强>(1) 在我的Appdelegate中我试过这个,它没有效果:

[UIApplication sharedApplication].statusBarStyle = UIStatusBarStyleDefault;

<强>(2) 在我的AppDelegate中我有这个,但它没有效果:

UINavigationBar.appearance.translucent = NO;
UINavigationBar.appearance.barStyle = UIBarStyleBlack;

<强>(3) 就在呈现ContactsController之前,我有这个(没有效果):

self.navigationController.navigationBar.barStyle = UIBarStyleBlack;
self.navigationController.navigationBar.translucent = NO;

<强>(4) 在呈现Controller之前,这也没有效果:

contactPicker.navigationController.navigationBar.translucent = NO;
contactPicker.navigationController.navigationBar.barStyle = UIBarStyleBlack;

<强>(5) 通过扩展类并重写方法&#34; preferredStatusBarStyle&#34;

来实现

注意:在我的plist中我设置了#34;查看基于控制器的状态栏外观&#34;到&#34;是&#34;

对于所有其他ViewControllers,只需将半透明和NavigationCotroller的barStyle设置为UIBarStyleBlack即可,但 不适用于联系人。

·H

#import <ContactsUI/ContactsUI.h>

@interface ContactViewController : CNContactPickerViewController

@end

的.m

#import "ContactViewController.h"

@interface ContactViewController ()

@end

@implementation ContactViewController

- (void)viewDidLoad {
   [super viewDidLoad];

}

- (void)didReceiveMemoryWarning {
   [super didReceiveMemoryWarning];
}

-(UIStatusBarStyle)preferredStatusBarStyle {
   return UIStatusBarStyleLightContent;
}
@end