Ken*_*ent 21 appearance uinavigationbar uitoolbar uitabbar
在我的iPad应用程序中,我有一个应用程序设置视图 其中一个选项允许用户切换界面颜色方案.设置视图由segue加载到一个单独的视图控制器,而不是我的"主"应用程序窗口.
当他们选择一种新颜色时,我切换colorSchemeColor变量并执行以下操作:
// set the colors and refresh the view
[[UINavigationBar appearance] setBarTintColor:colorSchemeColor];
[[UIToolbar appearance] setBarTintColor:colorSchemeColor];
[[UITabBar appearance] setBarTintColor:colorSchemeColor];
Run Code Online (Sandbox Code Playgroud)
但是,在退出设置视图之前,没有任何条形图会改变颜色!(当设置窗口消失时,"主"应用程序的颜色会正确更改!)
那么我尝试在刷新设置视图后立即放置此代码:
[self.view setNeedsDisplay];
[self.view setNeedsLayout];
Run Code Online (Sandbox Code Playgroud)
这没有帮助.所以我也添加了这个:
[self.navigationController.view setNeedsDisplay];
[self.navigationController.view setNeedsLayout];
Run Code Online (Sandbox Code Playgroud)
这也不起作用.
当选择新颜色时,如何将我的设置视图设置为"重绘",以便更改立即变得明显?
非常感谢!
Aar*_*ger 33
外观代理仅影响新初始化视图的外观.在外观代理上设置颜色对已经可见的导航栏没有影响.
您需要手动更新当前视图; 例如:
self.navigationController.navigationBar.barTintColor = [UINavigationBar appearance].barTintColor;
Run Code Online (Sandbox Code Playgroud)
zao*_*ian 17
Objective-C的:
self.navigationController.navigationBarHidden = YES;
self.navigationController.navigationBarHidden = NO;
Run Code Online (Sandbox Code Playgroud)
迅速:
self.navigationController?.isNavigationBarHidden = true
self.navigationController?.isNavigationBarHidden = false
Run Code Online (Sandbox Code Playgroud)
虽然我认为Aaron Brager的答案是理想的appraoch,但我的应用需要大约15种不同的外观设置并使用分割视图控制器,所以我必须将所有设置重新应用到全局外观,然后将它们全部应用到我显示的两个视图中.这是很多冗余的代码.
根据提出和解除模态视图控制器的想法强制重绘它下面的所有东西,我尝试了这个并且它完美地工作:
UIViewController *redrawTrigger = [[UIViewController alloc] init];
redrawTrigger.modalPresentationStyle = UIModalPresentationFullScreen;
[mySplitViewController presentModalViewController:redrawTrigger animated:FALSE];
[mySplitViewController dismissModalViewControllerAnimated:FALSE];
[redrawTrigger release];
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
10148 次 |
最近记录: |