在我的iPad应用程序中,我有一个应用程序设置视图。其中一个选项允许用户切换界面颜色方案。设置视图由segue加载到一个单独的视图控制器,而不是我的“主”应用程序窗口。
当他们选择一种新颜色时,我会切换colorSchemeColor变量并执行以下操作:
// set the colors and refresh the view
[[UINavigationBar appearance] setBarTintColor:colorSchemeColor];
[[UIToolbar appearance] setBarTintColor:colorSchemeColor];
[[UITabBar appearance] setBarTintColor:colorSchemeColor];
但是,在我退出设置视图之前,没有任何条形图会改变颜色! (当设置窗口消失时,“主”应用程序的颜色会正确更改!)
然后我尝试将此代码放在刷新设置视图之后:
[self.view setNeedsDisplay];
[self.view setNeedsLayout];
没有帮助。所以我也添加了这个:
[self.navigationController.view setNeedsDisplay];
[self.navigationController.view setNeedsLayout];
这也不起作用。
当选择新颜色时,如何将我的设置视图设置为“重绘”,以便更改立即明显?
非常感谢!
答案 0 :(得分:31)
外观代理仅影响新初始化视图的外观。在外观代理上设置颜色对已经可见的导航栏没有影响。
您需要手动更新当前视图;例如:
self.navigationController.navigationBar.barTintColor = [UINavigationBar appearance].barTintColor;
答案 1 :(得分:14)
目标-C:
self.navigationController.navigationBarHidden = YES;
self.navigationController.navigationBarHidden = NO;
夫特:
self.navigationController?.isNavigationBarHidden = true
self.navigationController?.isNavigationBarHidden = false
答案 2 :(得分:8)
虽然我认为Aaron Brager的答案是理想的appraoch,但我的应用程序需要大约15种不同的外观设置并使用分割视图控制器,所以我必须将所有设置重新应用到全局外观,然后将它们全部应用到我显示的两个观点。这是很多冗余的代码。
根据提出和解除模态视图控制器的想法强制重绘它下面的所有内容,我尝试了这个并且它完美地运行了:
UIViewController *redrawTrigger = [[UIViewController alloc] init];
redrawTrigger.modalPresentationStyle = UIModalPresentationFullScreen;
[mySplitViewController presentModalViewController:redrawTrigger animated:FALSE];
[mySplitViewController dismissModalViewControllerAnimated:FALSE];
[redrawTrigger release];