模式视图控制器 – UIBarButtonItems不会持续

我呈现模式视图控制器,打包在一个UINavigationController。

当他们第一次出现时,酒吧button项目是好的。

但是,如果我点击一个button,并将一个新的视图控制器推到UINavigationController,然后我使用该视图控制器的后退button,它会popup回原来的模式视图控制器button不显示 ,(但是当我点击它们的时候它们就会工作 – >就是看不到它们)

我似乎无法弄清楚为什么会发生这种情况。

这是一些代码。

哦,顺便说一下,我定制了导航控制器的导航栏的背景。 我有一种感觉,这可能是造成这种视觉干扰,但我不知道怎么改变才能正确。

在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方法中设置的,为什么当我从另一个视图控制器返回时,为什么看不到它们(但它们仍然是可用的)?

这似乎是一个过度复杂的做法。

为什么不创build自己的button,然后使用UINavigationBar中的setRightBarButtonItems:items:方法设置所需的button?

我猜他们消失,因为你将它们添加到UINavigationBar的图层。

不过,如果你想保持这个方法的图层,你可能想要将它们添加到viewWillAppear方法,但你可能需要调用removeFromSuperlayer,以确保你不要添加的东西不止一次。

希望这可以帮助。

问题是:

  • 导航栏的渐变(由代码完成)

解决scheme是:

  • 使用“草图”创build渐变图像,并使用外观代理将图像设置为背景图像

    [[UINavigationBar appearance] setBackgroundImage:[UIImage imageNamed:@"NavigationBarBackground"] forBarMetrics:UIBarMetricsDefault];