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

时间:2013-11-22 00:28:01

标签: ios objective-c ipad cocoa-touch modalviewcontroller

在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时,导航栏项仍然是红色???

从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;

6 个答案:

答案 0 :(得分:10)

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

为了进一步调试,我建议继承您的一个视图(或直接窗口)并实现tintColorDidChange。记录tintAdjustmentMode的值。我担心这会导致你的灰色问题。

一种解决方法是强制UIViewTintAdjustmentModeNormal,但这会在打开弹出窗口或工作表时产生不变暗的效果。

答案 1 :(得分:3)

我不得不把

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

在我的viewDidLoad中解决此问题。但正如其他答案中所提到的,当弹出窗口启动时,它确实会产生不会使条形按钮项变暗的不利影响。

答案 2 :(得分:1)

刚刚放

self.view.tintAdjustmentMode = UIViewTintAdjustmentModeNormal;
在你的viewDidLoad中

,你的颜色恢复正常。

答案 3 :(得分:0)

肯定存在一个错误。我注意到当弹出窗口出现时会使窗口变暗但在我手动更改keyWindow.tintAdjustmentMode后(对于自定义视图和模态视图控制器),即使我设置了keyWindow.tintAdjustmentMode,弹出窗口也会停止变暗回到自动。

答案 4 :(得分:0)

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

我在显示为弹出窗口的UIViewController中修复此问题 - 覆盖ViewWillDisappear方法并将主视图控制器视图上的TintAdjustmentMode设置回Normal。 (在Xamarin中,我使用UIApplication.SharedApplication.KeyWindow.RootViewController.View.TintAdjustmentMode = UIViewTintAdjustmentMode.Normal对一路上的空值进行了一些检查。)

答案 5 :(得分:0)

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

删除它:

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

添加以下内容:

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