iOS 7中UIActivityViewControllers的模态状态栏和导航栏文本颜色

Hen*_*ing 17 textcolor uinavigationbar tintcolor uiactivityviewcontroller ios7

当我使用a时UIActivityViewController,在用户选择活动(例如Mail或Message)后,我无法更改状态栏的文本颜色,也无法更改"取消"和"发送"导航栏按钮的文本/色调颜色.对于条形按钮,在AppDelegate我尝试过使用:

    [[UINavigationBar appearance] setTintColor:[UIColor whiteColor]];
Run Code Online (Sandbox Code Playgroud)

没有任何反应.但是我可以用这个设置导航栏标题:

    [[UINavigationBar appearance] setTitleTextAttributes:[NSDictionary dictionaryWithObjectsAndKeys:[UIColor whiteColor], UITextAttributeTextColor, nil]];
Run Code Online (Sandbox Code Playgroud)

我设置UIViewControllerBasedStatusBarAppearanceNOInfo.plist.并把线:

    [[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent];
Run Code Online (Sandbox Code Playgroud)

AppDelegate,并没有运气改变状态栏颜色.有任何想法吗?

Mik*_*ers 7

由于UIActivityViewController提供了底层模型视图控制器,我们使用此解决方法来修复状态栏颜色问题:

@interface StatusBarColorApplyingActivityViewController : UIActivityViewController

@end

@implementation StatusBarColorApplyingActivityViewController

- (void)presentViewController:(UIViewController *)viewControllerToPresent animated:(BOOL)flag completion:(void (^)(void))completion {
  [super presentViewController:viewControllerToPresent animated:flag completion:^{
    [[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent];
    if (completion) {
      completion();
    }
  }];
}

@end
Run Code Online (Sandbox Code Playgroud)

正如您所看到的,这只是一个扩展UIActivityViewController的类覆盖了presentViewController:animated:completion:.当呈现视图控制器时,我们通过完成块中的UIApplication设置状态栏样式.然后我们调用给出方法的原始完成块(如果有的话).

  • 在iOS 8中覆盖`presentViewController:animated:completion`不起作用,所以我覆盖了`viewWillAppear`和`viewWillDissappear`来在样式之间来回切换. (2认同)

Kev*_*rlo 2

我相信更改导航栏颜色的代码是这样的:

[[UINavigationBar appearance] setBarTintColor:[UIColor whiteColor]];
Run Code Online (Sandbox Code Playgroud)

这是为了更改 iOS 7 中导航栏按钮的颜色(如果您可能需要的话):

[[UINavigationBar appearance] setTintColor:[UIColor whiteColor]];
Run Code Online (Sandbox Code Playgroud)

如果您想更改 iOS 6 中按钮的颜色,请使用以下代码:

[[UIBarButtonItem appearance] setTintColor:[UIColor redColor]];
Run Code Online (Sandbox Code Playgroud)

此代码也适用于 iOS 8+,用于更改 UIActivityViewController 活动的栏按钮文本颜色(例如通过消息或邮件编辑器共享)。