导航栏上的按钮不会拾取窗口色调

时间:2014-07-10 10:30:56

标签: ios objective-c ipad uinavigationcontroller

注意,我最近回到这里,它似乎已经在更新版本的SDK中得到修复,除了问题中的代码之外我不需要实现任何东西。非常感谢所有回答的人。

我有一个在iPad上运行的Objective-C应用程序,并显示一个模式呈现样式为UIModalPresentationPageSheet的视图控制器:

UINavigationController *editorNavigationController = [[UINavigationController alloc] initWithRootViewController:editorViewController];
editorNavigationController.modalPresentationStyle = UIModalPresentationPageSheet;
[navigationController presentViewController:editorNavigationController animated:YES completion:nil];

当显示这个视图控制器时,导航栏中的按钮是紫色的,我假设它是从窗口的色调中拾取的,这就是我想要的。

稍后我需要在顶部显示另一个视图控制器,它填满整个窗口:

UINavigationController *previewNavigationController = [[UINavigationController alloc]initWithRootViewController:myPreviewViewController];
[owningViewController presentViewController:previewNavigationController animated:YES completion:nil];

我遇到的问题是,当显示myPreviewController时,导航栏中的按钮是灰色的。我尝试在新的导航控制器上重新恢复颜色:

previewNavigationController.navigationBar.tintColor = [UIColor colorWithRed:123/255.0 green:26/255.0 blue:69/255.0 alpha:1];

但没有任何快乐。

如何让按钮具有正确的颜色?我可以让新的导航控制器自动拾取窗口色调颜色,还是必须明确设置它?这与将第二个导航控制器显示在使用UIModalPresentationPageSheet的顶部导航控制器吗?

有关

任何帮助非常感谢!谢谢,

2 个答案:

答案 0 :(得分:2)

您可以将navigationBar设置为半透明且透明。 在视图中Will Appear

self.navigationController.navigationBar.translucent = NO;

创建一个框架大小为navigationBar (CGRectMake(0,0,self.view.frame.size.height,22)的UIView,并在其上创建所需颜色的按钮。 我知道,这是一个拐杖,但应该工作)

答案 1 :(得分:1)

您可以全局更改UIBarButtonItem的外观,以便所有UINavigationControllers共享相同的设计:

[[UIBarButtonItem appearance] setTintColor:[UIColor purpleColor]];
[[UIBarButtonItem appearance] setTitleTextAttributes:[NSDictionary dictionaryWithObjectsAndKeys:
                                                          [UIFont fontWithName:@"fontName" size:16.0f],NSFontAttributeName,
                                                          nil] forState:UIControlStateNormal]; 

此外,您还可以更改[UINavigationBar appearance]

//The setTintColor would tint the < Back button in the NavigationBar 
[[UINavigationBar appearance] setTintColor:[UIColor greenColor]];
[[UINavigationBar appearance] setBarTintColor:[UIColor redColor]];
[[UINavigationBar appearance] setTitleTextAttributes:
     @{NSForegroundColorAttributeName:[UIColor blueColor]}];

此代码可以在展示UIViewControllers之前添加,也可以只在AppDelegate.m中添加。