【问题标题】:NavigationBar not displaying properling when pushViewController当 pushViewController 时,NavigationBar 不正确显示
【发布时间】:2012-05-01 12:50:21
【问题描述】:

这个问题用图片很容易理解。 我有一个 UINavigationController 允许用户在视图之间切换。

第一个视图包含一个搜索栏和一个表格视图,如下所示:

第二个是显示单元格信息的基本视图

当我点击搜索栏时,导航控制器被隐藏,搜索栏现在位于顶部。

现在,如果我单击一个单元格,它将转到第二个视图,但导航栏首先隐藏如下:

然后,它会自动显示为:

我已经尝试了一些方法,例如在推送下一个视图控制器之前显示导航栏,但它非常难看.. 有谁知道如何在第二个视图上直接显示导航栏(如在联系人应用程序中)?

[更新]:代码

AppDelegate.m(我说的是navigationcontroller2)

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{    
    self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
    FirstViewController *viewController1 = [[FirstViewController alloc] initWithNibName:@"FirstViewController" bundle:nil];
    SecondViewController *viewController2 = [[SecondViewController alloc] initWithNibName:@"SecondViewController" bundle:nil];

    viewController1.managedObjectContext = [self managedObjectContext];
    viewController2.managedObjectContext = [self managedObjectContext];
    viewController1.viewController2 = viewController2;

    UINavigationController *navigationcontroller1 = [[UINavigationController alloc] initWithRootViewController:viewController1];
    [navigationcontroller1.navigationBar setTintColor:[UIColor lightGrayColor]];
    UINavigationController *navigationcontroller2 = [[UINavigationController alloc] initWithRootViewController:viewController2];
    [navigationcontroller2.navigationBar setTintColor:[UIColor lightGrayColor]];

    self.tabBarController = [[UITabBarController alloc] init];
    self.tabBarController.viewControllers = [NSArray arrayWithObjects:navigationcontroller1, navigationcontroller2, nil];

    self.window.rootViewController = self.tabBarController;
    [self.window makeKeyAndVisible];

    return YES;
}

FirstView.m

- (void) searchBarTextDidBeginEditing:(UISearchBar *)theSearchBar {
    [self.navigationController setNavigationBarHidden:YES animated:YES];
}

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
    if (!noResultsToDisplay) {
        PinDetailsViewController *pinDetailsViewController = [[PinDetailsViewController alloc] initWithNibName:@"PinDetailsViewController" bundle:nil];
        NSManagedObject *managedObject = [fetchedResultsController objectAtIndexPath:indexPath];
        Pin *pin = (Pin *) managedObject;

        [self.navigationItem setTitle:@"Pins"];
        [self.navigationController pushViewController:pinDetailsViewController animated:YES];
        [pinDetailsViewController updateWithPin:pin];
    }
}

如果您需要其他任何东西,尽管问,但我认为这一切都在那里。

【问题讨论】:

  • 请贴一些代码。否则很难看出问题出在哪里。

标签: objective-c ios uinavigationcontroller


【解决方案1】:

尝试在每个视图控制器中使用此代码。

- (void) viewWillAppear:(BOOL)animated
{

    [self.navigationController setNavigationBarHidden:NO animated:animated];

}


- (void) viewWillDisappear:(BOOL)animated
{
    [self.navigationController setNavigationBarHidden:YES animated:animated];

}

【讨论】:

  • 我改变了我的应用程序的整个布局,所以我不再使用它,但它就像一个魅力。希望它会帮助其他人。谢谢。
  • 它帮助我摆脱了 2015 年 12 月的头痛!谢谢。
【解决方案2】:

在你推送新的视图控制器之前,你应该取消隐藏导航栏:

[self.navigationController setNavigationBarHidden:NO animated:YES];

【讨论】:

  • 如果您再次阅读我的帖子,您会发现我已经尝试过了。它有效,但它很丑。我想要与联系人应用程序中相同的行为。
【解决方案3】:

我的导航栏位置也有类似的问题。我的在状态栏后面向上移动,我通过手动设置导航栏框架解决了这个问题:

-(void)adjustNavBarOrigin
{
    CGRect r = self.navigationController.navigationBar.frame;
    r.origin = CGPointMake(0, 20);  // 20 is the height of the status bar
    self.navigationController.navigationBar.frame = r;   
}

我不得不在很多地方调用这个方法,包括 viewWillAppear: 和 didRotateFromInterfaceOrientation:,但它奏效了 :)

【讨论】:

    【解决方案4】:

    隐藏 UINavigationBar 有时会干扰属性。尝试使用属性alpha 而不是hidden

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-04-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多