奇怪的UINavigationBar行为?

时间:2013-11-20 15:29:49

标签: ios objective-c cocoa-touch uinavigationcontroller uibarbuttonitem

在我的应用程序中,我有一个窗口tintColor,它将所有颜色设置为红色。用户按下根视图控制器上的条形按钮项(红色项),并呈现带有导航栏的UIModalPresentationSheet(红色导航项)。按下 导航项上的按钮后,它会拉出一个完整的模态视图,现在这个模态视图也有一个导航栏,但所有导航项都是灰色的;它们是可用的,并且仍然运行正确的功能,但它们的颜色是灰色的。知道为什么吗?起初我尝试使用灰色按钮以编程方式执行此操作,然后我通过故事板进行操作并直接在场景中着色导航项并且它们看起来是红色的,但在发布时,它们在模态视图上是灰色的。谁能告诉我为什么?

以下是模态视图的呈现方式:

- (void)barButtonItemPressedOnUIModalPresentationSheet {

    asdfVC *viewController = [self.storyboard instantiateViewControllerWithIdentifier:@"showAsdf"];
    UINavigationController *navigationController = [[UINavigationController alloc] initWithRootViewController:viewController];

    [self presentViewController:navigationController animated:YES completion:nil];
}

奇怪的是我在正确的VC类中设置了nav色调,按钮色调,甚至是视图色调,但似乎完全忽略了它。可能是因为我在呈现它之前在它上面设置了一个导航栏吗?

5 个答案:

答案 0 :(得分:1)

您可以尝试使用appearance属性设置整个应用程序的颜色。 在AppDelegate中设置它,UI将查看所有相同的视图。

tintColor设置为红色使用:

[[UINavigationBar appearance]setTintColor:[UIColor redColor];

[[UIBarButtonItem appearance]setTintColor:[UIColor redColor];

您还可以查看以下代码以获得更多自定义:

[[UIBarButtonItem appearanceWhenContainedIn:[UINavigationBar class], nil]setTintColor:[UIColor redColor]];

答案 1 :(得分:1)

您可以在AppDelegate.h类中创建UINavigationController的属性。

@property (strong, nonatomic) UINavigationController *navigationController;

在你的AppDelegate.m类中,在didFinishLaunchingWithOptions方法中编写下面的代码

self.navigationController=[[UINavigationController alloc]initWithRootViewController:self.UIModalPresentationSheet];
self.window.rootViewController = self.navigationController;

现在在UIModalPresentationSheet类的ViewDidLoad方法中编写此代码

-(void)viewDidLoad
{
   [super viewDidLoad];
   self.navigationController.navigationBar.tintColor = [UIColor redColor];
}

希望它会奏效。

答案 2 :(得分:0)

您可以尝试在视图控制器和导航栏上设置色调颜色,并显示绿色:

viewController.view.tintColor = [UIColor redColor];
viewController.navigationController.navigationBar.tintColor = [UIColor redColor];

答案 3 :(得分:0)

我在我的应用程序中遇到了这个完全相同的异常,并尝试了所有你尝试过的东西。我已经把代码设置为在viewWillAppear和viewDidAppear中使颜色变为蓝色(在我的情况下),似乎没有任何东西可以修复它。我的猜测是这是一个IOS错误。

答案 4 :(得分:0)

这是因为Apple认为我们不会提供超过1个视图控制器并将背景和所有条形按钮项目(不确定原因)调暗为默认行为以将焦点放在最前面的视图上。

要解决此问题,您只需在DidFinishLaunchingWithOptions的应用程序窗口中强制tintAdjustmentMode为Normal。

self.window.tintAdjustmentMode = UIViewTintAdjustmentModeNormal;