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

问题描述:

在appDidFinishLaunchingWithOptions上,我使用以下代码将我的整个应用程序染成红色。真的很奇怪的应用程序的颜色行为?

self.window.tintColor = [UIColor otfRedColor]; 

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

我有3个视图控制器,a,b和c。 A拉起b的模态演示视图表,拉出c的完整模态视图。当C被拉起时,导航栏上的酒吧按钮项全部呈灰色,这不应该发生,因为我没有在应用程序代表着色窗后以任何方式更改任何色调或颜色。然后我使用

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

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

代码从上拉视图控制器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; 

我认为这是iOS7在处理tintAdjustmentMode错误时打开并关闭床单和弹出。我已经看到这个错误发生在Apple的本地邮件应用程序中,其中条形按钮项变为灰色,或者相反,一旦弹出窗口出现,它们不再变为灰色。

为了进一步调试,我建议对您的一个视图(或直接窗口)进行子类化并实施tintColorDidChange。在那里记录tintAdjustmentMode的值。我担心这是什么导致你的灰色色调问题。

一种解决方案是强制UIViewTintAdjustmentModeNormal,但这会在打开弹出窗口或工作表时产生调光效果。

+0

你能举例说明UIViewTintAdjustmentModeNormal好吗? –

+0

我不知道100%,因为我没有处理这样的问题,但我认为如果您将其设置为UIViewTintAdjustmentModeNormal而不是UIViewTintAdjustmentModeAutomatic,它将不会从正常状态切换为暗灰色。所以你理论上可以在窗口中做到这一点。 –

+2

我设置了self.window.tintAdjustmentMode = UIViewTintAdjustmentModeNormal;在我的应用程序代表中,修复了所有灰色调,并且不知何故,我的模态视图仍然使背景变暗。不知道它为什么会起作用,但不会去争取一件好事! –

只要把

self.view.tintAdjustmentMode = UIViewTintAdjustmentModeNormal; 

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

+0

我把它放在我的医学发布课上,但是当它被解雇时,一切都是灰色的。 –

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

我只好把

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

在我viewDidLoad来解决这个问题。但正如在其他答案中提到的那样,当弹出窗口弹起时,它不会减弱酒吧按钮项目的不利影响。

当显示弹出窗口时,主视图的TintAdjustmentMode设置为Dimmed。这应该在弹出窗口关闭时反转,但是当您从弹出窗口导航到新的屏幕时,由于某种原因它不会发生。

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

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

删除此:

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

添加这些:

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