真的很奇怪的应用程序的颜色行为?
在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()