2015-01-15 212 views
1

我想用我的应用程序在我的UINavigationBar中添加一个渐变。我发现它在https://github.com/chroman/CRGradientNavigationBar自定义导航栏给我双导航栏iN查看

我的应用程序是一个选项卡栏控制器应用程序,其中每个选项卡是一个NavigationController。我有我的代码设置为:

UINavigationController *navigationController = [[UINavigationController alloc] initWithNavigationBarClass:[CRGradientNavigationBar class] toolbarClass:nil]; 

UIColor *firstColor = [UIColor colorWithRed:255.0f/255.0f green:42.0f/255.0f blue:104.0f/255.0f alpha:1.0f]; 
UIColor *secondColor = [UIColor colorWithRed:255.0f/255.0f green:90.0f/255.0f blue:58.0f/255.0f alpha:1.0f]; 

NSArray *colors = [NSArray arrayWithObjects:firstColor, secondColor, nil]; 
// or NSArray *colors = [NSArray arrayWithObjects:(id)UIColorFromRGB(0xf16149).CGColor, (id)UIColorFromRGB(0xf14959).CGColor, nil]; 

[[CRGradientNavigationBar appearance] setBarTintGradientColors:colors]; 
[[navigationController navigationBar] setTranslucent:NO]; // Remember, the default value is YES. 

[navigationController setViewControllers:@[tabBarController]]; 

[self.window setRootViewController:navigationController]; 

但是,我得到双倍导航栏,以标题和被添加到第二uibarbuttonitems,而不是一个梯度。有什么建议么?

回答

0

UITabBarController不应该是rootViewController的UINavigationController。请尝试设置tabBarController作为窗口RootViewController的,就像这样:

[self.window setRootViewController:tabBarController]; 

那么你将要填写与导航控制器的标签栏控制器上的viewControllers阵列,这导致每个选项卡中取得自己的导航栏,视图控制器堆栈:

UINavigationController *navigationController = [[UINavigationController alloc] initWithNavigationBarClass:[CRGradientNavigationBar class] toolbarClass:nil]; 
[tabBarController setViewControllers:@[navigationController]]; 

这将导致在底部所示的一个标签中,并且在顶部该标签导航栏标签栏控制器。如果你想要更多的标签,只需添加更多的视图控制器实例您在tabBarController设置viewControllers阵列:

UINavigationController *navigationController1 = [[UINavigationController alloc] initWithNavigationBarClass:[CRGradientNavigationBar class] toolbarClass:nil]; 
UINavigationController *navigationController2 = [[UINavigationController alloc] initWithNavigationBarClass:[CRGradientNavigationBar class] toolbarClass:nil]; 
UINavigationController *navigationController3 = [[UINavigationController alloc] initWithNavigationBarClass:[CRGradientNavigationBar class] toolbarClass:nil]; 
[tabBarController setViewControllers:@[navigationController1,navigationController2,navigationController3]]; 

每个导航控制器都将在堆栈上开始有至少1个UIViewController的,就像这样:

UINavigationController *navigationController = [[UINavigationController alloc] initWithNavigationBarClass:[CRGradientNavigationBar class] toolbarClass:nil]; 
UIViewController* viewControllerForNavigationController = [UIViewController new]; 
[navigationController setViewControllers:@[viewControllerForNavigationController]]; 
+0

这正是我如何设置。我的根是一个标签栏控制器。每个标签都有一个导航控制器。我的问题是,当从github添加这个子类的NavigationBar时,它并没有为每个选项卡取代导航控制器的导航栏,而只是在其上添加一个新的导航栏。 – user717452 2015-01-19 16:10:20

+0

对不起,我正在编辑此评论 – 2015-01-21 20:03:22

+0

在您提供的代码中,看起来好像标签栏控制器是导航控制器上的视图控制器,并且导航控制器已设置为窗口的根视图控制器: [navigationController setViewControllers:@ [tabBarController]]; [self.window setRootViewController:navigationController]; – 2015-01-29 17:18:54