使用ABNewPersonViewController

时间:2017-11-14 20:34:20

标签: ios objective-c ios11

我继承了遗留应用,并负责为iOS 11更新它。在一个视图中,用户可以点击名称并将该用户添加到他们的联系人。但是,当进入“添加联系人”时在iOS 11中查看,导航和状态栏显示为白色。它在iOS 10及更低版本上运行良好。

这是一张比较iOS 10(左)和iOS 11(右)的屏幕截图:

iOS 10 vs 11 请注意,此视图是以编程方式创建的,而不是通过故事板创建的:

ABRecordRef person = ABPersonCreate();
//...
ABNewPersonViewController *newPersonViewController = [[ABNewPersonViewController alloc] init];
[newPersonViewController setDisplayedPerson:person];
newPersonViewController.newPersonViewDelegate = self;
UINavigationController *newNavigationController = [[UINavigationController alloc] initWithRootViewController:newPersonViewController];
[self presentViewController:newNavigationController animated:YES completion:nil];
CFRelease(person);

我根据在网上找到的内容尝试了一些不同的东西:

  1. 我发现我可以手动设置导航栏的背景颜色,但状态栏会保持白色。
  2. 我尝试在新视图中添加HeightConstraint。我确认添加了约束,但它没有帮助。但是,我必须使用常量设置值(尝试0,100,1000仅用于测试)并且无法使相对约束正常工作。无论如何,不​​确定是否值得走这条路。
  3. 我在网上看到一些文章,iOS 11改变了状态/导航栏的工作方式,并建议将setContentInsetAdjustmentBehavior设置为NEVER。但是,这看起来只适用于ScrollViews或TableViews。此联系人添加视图似乎只是一个UIView。
  4. 尝试切换到CNContactViewController(因为ABNewPersonViewController已被弃用),并遇到了同样的问题。
  5. 任何建议都会有所帮助。

    编辑:导航栏颜色在didFinishLaunchingWithOptions方法的AppDelegate中设置,如下所示。我尝试删除在此处设置的所有自定义逻辑。这有点修复了导航栏,但状态栏仍然是白色的白色文字。

    -(BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
    // Override point for customization after application launch.
    
    if ([MPUtils isIOS7OrHigher]) {
        [[UIToolbar appearance] setBarTintColor:[MPColors colorWithColorString:MPColorString0A3B77]];
        [[UINavigationBar appearance] setBarTintColor:[MPColors colorWithColorString:MPColorString0A3B77]];
    
        //color of text on buttons:
        [[UINavigationBar appearance] setTintColor:[UIColor whiteColor]];
        [[UINavigationBar appearance] setTitleTextAttributes:@{UITextAttributeTextColor : [UIColor whiteColor]}];
    } else {
        [[UIToolbar appearance] setTintColor:[MPColors colorWithColorString:MPColorString0A3B77]];
        [[UINavigationBar appearance] setTintColor:[MPColors colorWithColorString:MPColorString0A3B77]];
    }
    
    [[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent];
    
    [MPUserDataSynchronizer syncUserData];
    
    return YES;
    }
    

2 个答案:

答案 0 :(得分:1)

我也遇到了这类问题,我通过这样做解决了这个问题。

  [[UINavigationBar appearance] setTranslucent:NO];
  [[UINavigationBar appearance] setBarTintColor: [UIColor redColor]];
  [[[[UIApplication sharedApplication] delegate] window] setBackgroundColor:[UIColor redColor]];

希望这会帮助某人并节省很多时间:)。

答案 1 :(得分:0)

在iOS 9中不推荐使用

ABNewPersonViewController。请改用CNContactViewController