真的很奇怪的应用程序的颜色行为?

在appDidFinishLaunchingWithOptions,我用下面的代码染红我的整个应用程序。

self.window.tintColor = [UIColor otfRedColor]; 

这完美的作品,当我的应用程序加载时,所有的导航栏项目是红色的。 A是我的根视图控制器。

我有3个视图控制器,a,b和c。 A拉起了一个模式演示视图表B,拉起了一个完整的模式视图的C. 当C被拉起时,导航栏上的酒吧button项目都是灰色的,这不应该发生,因为在应用程序代表着色窗口后,我没有任何改变任何色调或颜色。 我然后使用

 [self.presentingViewController.presentingViewController dismissViewControllerAnimated:YES completion:nil]; 

解散VC c和b,但现在我的整个应用程序是灰色的。 自应用程序委托之后,我还没有使用任何色调代码,为什么会发生这种情况? 当我再次从A到B时,导航栏中的项目仍然是红色的?

从A上拉视图控制器B的代码:

 AthleteAdd *addAthlete = [self.storyboard instantiateViewControllerWithIdentifier:@"addAthlete"]; UINavigationController *navigationController = [[UINavigationController alloc] initWithRootViewController:addAthlete]; addAthlete.delegate = self; navigationController.modalPresentationStyle = UIModalPresentationFormSheet; [self presentViewController:navigationController animated:YES completion:nil]; 

从B上拉C的代码:

  MedicalReleaseVC *medRelease = [self.storyboard instantiateViewControllerWithIdentifier:@"showMedRel"]; medRelease.delegate = self; [self presentViewController:medRelease animated:YES completion:nil]; 

有谁知道这是为什么发生,或有一个想法? 我已经尝试着将第三个视图控制器作为红色3个单独的方式,它仍然是灰色的,然后当一切都被解散,我的整个应用程序是灰色的。 请帮忙!!

编辑:

如果有帮助,我解决这个问题的方式是通过在我的appdelegate.m中设置以下内容

  self.window.tintAdjustmentMode = UIViewTintAdjustmentModeNormal; 

我认为这是tintAdjustmentMode在打开和closures表单和popuptintAdjustmentMode时处理tintAdjustmentMode的一个错误。 我已经看到这个错误发生在苹果的本地邮件应用程序,其中栏button项变灰,或者相反,一旦popup窗口显示,它们不再变成灰色。

要进一步debugging,我build议你的一个视图(或直接窗口) tintColorDidChange和实现tintColorDidChange 。 在那里loggingtintAdjustmentMode的值。 我担心这是什么导致你的灰色色调问题。

一种解决scheme是强制UIViewTintAdjustmentModeNormal但是这会在打开popup窗口或表单时产生不UIViewTintAdjustmentModeNormal的效果。

我不得不放

 [[[UIApplication sharedApplication] keyWindow] setTintAdjustmentMode:UIViewTintAdjustmentModeNormal]; 

在我的viewDidLoad中解决这个问题。 但是正如其他答案中提到的那样,当popup窗口弹起时,不会产生减光条button项的不利影响。

刚刚放

 self.view.tintAdjustmentMode = UIViewTintAdjustmentModeNormal; 

在你的viewDidLoad和你的颜色恢复正常。

肯定有一个错误。 我注意到,当popup窗口显示的时候会使窗口变暗,但是在手动更改keyWindow.tintAdjustmentMode (对于自定义视图和模式视图控制器)之后,即使将keyWindow.tintAdjustmentMode设置为自动,popup窗口也将停止调keyWindow.tintAdjustmentMode

显示popup窗口时,主视图的TintAdjustmentMode设置为“ Dimmed 。 当popup窗口closures时,这应该颠倒过来,但是当从popup窗口导航到新的屏幕时,由于某种原因它不会发生。

我在显示为popup窗口的UIViewController中解决了这个问题 – 重写ViewWillDisappear方法,并将主视图控制器视图上的TintAdjustmentMode设置为Normal 。 (在Xamarin中,我使用了UIApplication.SharedApplication.KeyWindow.RootViewController.View.TintAdjustmentMode = UIViewTintAdjustmentMode.Normal ,并且一路查找了一些空值。

另一个解决scheme是不设置窗口tintColor,而是在适当的地方使用外观代理,并在其他地方以编程方式(或在Interface Builder中)设置tintColor。 这似乎比设置全局窗口tintColor更安全,这会引起奇怪的行为,尤其是在模态,系统警报和操作表closures之后。

删除这个:

 self.window?.tintColor = UIColor.redColor() 

添加这些:

 UINavigationBar.appearance().barTintColor = UIColor.redColor() UINavigationBar.appearance().tintColor = UIColor.whiteColor() UISegmentedControl.appearance().tintColor = UIColor.orangeColor()