我提供模态视图控制器,打包在UINavigationController中。
首次出现时,条形按钮项目就可以了。
但是,如果我单击一个按钮并将一个新的视图控制器推送到UINavigationController,然后我使用该视图控制器的后退按钮,它将弹回到原始模态视图控制器,按钮没有显示,(但是当我点击它们时它们会起作用 - >只是看不到它们)
我似乎无法弄清楚为什么会这样。
这是一些代码。
哦,顺便说一下,我自定义导航控制器的导航栏的背景。我有一种感觉,这可能会导致这种视觉干扰,但我不知道要改变什么才能做到正确。
在GGMainViewController中:
GGSelectTeamsViewController *chooseTeam = [[GIFSelectTeamsViewController alloc] init];
UINavigationController* navigationController = [[UINavigationController alloc] initWithRootViewController:chooseTeam];
[self setupModalNavigationBar:navigationController];
[self presentViewController:navigationController animated:YES completion:nil];
- (void)setupModalNavigationBar:(UINavigationController *)nav {
// unnecessary code removed for a quicker read
// basically navigation bar has a background gradient as well as a bottom border
[nav.navigationBar.layer addSublayer:bottomBorder];
[nav.navigationBar.layer addSublayer:gradient];
}
在GGSelectTeamsViewController
中- (void)viewDidLoad
{
[super viewDidLoad];
title = [[UILabel alloc] init];
title.text = someText;
title.backgroundColor = [UIColor clearColor];
title.textColor = [UIColor whiteColor];
self.navigationItem.titleView = title;
[title sizeToFit];
UIButton *backButton = [UIButton buttonWithType:UIButtonTypeCustom];
[backButton setTitle:@"Back" forState:UIControlStateNormal];
[backButton setTitleColor:[UIColor whiteColor] forState:UIControlStateNormal];
backButton.frame = someFrame;
[backButton addTarget:self action:@selector(goBack) forControlEvents:UIControlEventTouchUpInside];
[self.navigationItem setLeftBarButtonItem:[[UIBarButtonItem alloc] initWithCustomView:backButton] animated:NO];
UIButton *selectButton = [UIButton buttonWithType:UIButtonTypeCustom];
[selectButton setTitle:@"Select" forState:UIControlStateNormal];
[selectButton setTitleColor:[UIColor whiteColor] forState:UIControlStateNormal];
selectButton.frame = someFrame;
[selectButton addTarget:self action:@selector(sendContent) forControlEvents:UIControlEventTouchUpInside];
[self.navigationItem setRightBarButtonItem:[[UIBarButtonItem alloc] initWithCustomView:selectButton] animated:NO];
}
由于导航项是在viewDidLoad方法中设置的,当我从另一个视图控制器返回时,为什么我看不到它们(但它们仍然可以正常工作)?
答案 0 :(得分:0)
这似乎是一种过于复杂的方式。
为什么不创建自己的按钮,然后使用UINavigationBar中的setRightBarButtonItems:items:方法设置所需的按钮?
我猜它们会消失,因为你将它们添加到UINavigationBar层。
但是,如果你想将这个方法与图层保持一致,你可能想在viewWillAppear方法中添加它们,但你可能需要调用removeFromSuperlayer来确保你不会多次添加东西。
希望这有帮助。
答案 1 :(得分:0)
问题是:
解决方案是:
使用Sketch创建渐变图像并使用外观代理将图像设置为背景图像
[[UINavigationBar appearance] setBackgroundImage:[UIImage imageNamed:@"NavigationBarBackground"] forBarMetrics:UIBarMetricsDefault];