在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;
答案 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()