导航栏全透明效果, 只保留左右两个按钮, 如何实现?以及关于NavigationController的小问题

时间:2022-02-19 19:01:37

[self.navigationController.navigationBar setBackgroundImage:[UIImage imageWithColor:[UIColor clearColor]] forBarMetrics:UIBarMetricsCompact];
   self.navigationController.navigationBar.barStyle = UIBaselineAdjustmentNone;
   [self.navigationController.navigationBar setShadowImage:[UIImage imageWithColor:[UIColor clearColor]]];
   self.navigationController.navigationBar.tintColor = [UIColor whiteColor];
   
   for (id view in self.navigationController.navigationBar.subviews)
   {
       if ([view isKindOfClass:NSClassFromString(@"_UINavigationBarBackground")])
       {
           for (id i in [view subviews])
           {
               if ([i isKindOfClass:[UIImageView class]])
               {
                   [i removeFromSuperview];
               }
           }
       }
   }
   
   [[[[self.navigationController.navigationBar.subviews firstObject] subviews] firstObject] removeFromSuperview];
   
   self.navigationItem.rightBarButtonItem = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemAdd target:self action:@selector(add)];
   self.navigationItem.leftBarButtonItem = [[UIBarButtonItem alloc] initWithTitle:@"More" style:UIBarButtonItemStyleDone target:self action:@selector(more)];

+ (UIImage *)imageWithColor:(UIColor *)color
{
   CGRect rect = CGRectMake(0, 0, 1, 1);
   UIGraphicsBeginImageContext(rect.size);
   CGContextRef context = UIGraphicsGetCurrentContext();
   CGContextSetFillColorWithColor(context, color.CGColor);
   CGContextFillRect(context, rect);
   UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
   UIGraphicsEndImageContext();
   
   return image;
}

//跳转到指定的视图控制器, 注意:要跳转到的视图控制器的对象,必须存在于导航控制器的栈容器中。
    
    //导航控制器的viewControllers属性是一个数组,数组中存放加入导航控制器栈中的所有视图控制器对象,并且数组中对象的下标与对象在栈容器中的位置一致
   
   [self.navigationController popToViewController:[[self.navigationController viewControllers] objectAtIndex:[[self.navigationController viewControllers] count]-4] animated:YES];