【问题标题】:How to hide an old UINavigationController and replace it with another one?如何隐藏旧的 UINavigationController 并用另一个替换它?
【发布时间】:2018-03-19 19:34:37
【问题描述】:

第一个视图控制器(A)包含一个带有背景色的普通 uinavigationcontroller,然后它推送一个新的视图控制器(B) 带有透明的导航控制器。我的第一次尝试是修改 B 中的导航控制器外观,然后在 B 弹回 A 时反转 uinavcontroller 的原始颜色。但是当我在两个视图之间进行转换推送和弹出。所以我想出的想法是更换旧的并添加一个完整的全新导航控制器。但是由于某些原因,新的导航控制器从不显示以下代码?

// Hide the old navigation controller
[self.navigationController setNavigationBarHidden:YES];

// Add a new one
UINavigationController *nav = [[UINavigationController alloc] initWithNavigationBarClass: [TransparentNavBarView class] toolbarClass: [UIToolbar class]];
[nav.navigationItem setLeftBarButtonItems: [self buttonBarItems]];
[nav willMoveToParentViewController: self];
[self.view addSubview: nav.view];
[self addChildViewController: nav];
[nav didMoveToParentViewController:self];

对我的问题有什么想法吗?谢谢

【问题讨论】:

    标签: ios uinavigationcontroller


    【解决方案1】:

    我认为您需要看看导航控制器在下面是如何工作的。
    参考:UINavigationController

    UINavigationController 控制 ViewControllers 的外观。当我们推送一个视图控制器时,我们实际上是把它的视图推送到导航控制器的容器视图上。 每个视图控制器的导航栏保持不变。

    您可以通过self.navigationController.navigationBar 访问由导航控制器管理的每个视图控制器中的navigationBar 属性。

    来自 Apple 文档:

    允许修改 barStyle 或 translucent 属性 导航栏,但您绝不能更改其框架、边界或 阿尔法值直接。要显示或隐藏导航栏,您应该 总是通过导航控制器改变它的 navigationBarHidden 属性或调用 setNavigationBarHidden:animated: 方法。

    【讨论】:

      【解决方案2】:

      使用此代码更改UINavigationBar.backgroundColor。并在你想改变NavigationBar颜色的viewWillAppear中调用这个方法。

      添加这个方法:

      [[UINavigationBar appearance] setBackgroundImage:[self barBackgroundImage] forBarMetrics:UIBarMetricsDefault];
      

      还有那个viewController中的这个方法

      -(UIImage*)barBackgroundImage{
      
          static UIImage *defaultImage = nil;
          static dispatch_once_t onceToken;
          dispatch_once(&onceToken, ^{
              UIGraphicsBeginImageContextWithOptions(CGSizeMake(20, 44), NO, 0.0f);
              [[UIColor grayColor] setFill];
              [[UIBezierPath bezierPathWithRect:CGRectMake(0, 0, 20, 44)] fill];
              defaultImage = UIGraphicsGetImageFromCurrentImageContext();
              UIGraphicsEndImageContext();
      
          });
      
          return defaultImage;
      
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2018-08-24
        • 1970-01-01
        • 2022-01-23
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多