导航栏原理及使用

1. 导航栏三个区域

UINavigationController *nav;
    nav.navigationBar;// 导航区
    nav.viewControllers;//内容区
    nav.toolbar;//工具区(默认隐藏)

   self.navigationController.toolbarHidden = NO; 显示导航区

1.1 导航区

     iOS7.0前, 导航条拟物化风格, 不透明 (内容区在导航条下:64开始)

     iOS7.0后, 扁平化风格,导航栏模式是透明的(0/64)  

              1.1.1  透明  内容(0)开始;

              1.1.2  透明  内容(64)开始 (0, iPhonex  84);

              1.1.3  不透明  内容全局 (0)

              1.1.4  不透明  内容从64开始  (0)

// 透明全局(默认)
- (void)translucentAndAll {
    self.navigationController.navigationBar.translucent = YES;
    self.edgesForExtendedLayout = UIRectEdgeAll;
//    self.automaticallyAdjustsScrollViewInsets = YES;
//    self.extendedLayoutIncludesOpaqueBars = NO;   // 是否包含透明的bar
}
// 透明 64
- (void)translucentAnd64 {
    self.navigationController.navigationBar.translucent = YES;
    self.edgesForExtendedLayout = UIRectEdgeTop;
    
}
// 不透明 全局
- (void)noTranslucentAndAll {
    self.navigationController.navigationBar.translucent = NO;
//    self.edgesForExtendedLayout = UIRectEdgeAll;
}
// 不透明 64
- (void)noTranslucentAnd64 {
    self.navigationController.navigationBar.translucent = NO;
    self.extendedLayoutIncludesOpaqueBars = YES;
}

2. 导航控制器跳转 

NSMutableArray *array = [NSMutableArray arrayWithArray:self.navigationController.viewControllers];
    [array removeLastObject];
    [array removeLastObject];
    
    self.navigationController.viewControllers = array;
    
    [self.navigationController popViewControllerAnimated:YES];

3. NavigationBar

      3.1 设置导航条透明度

- (void)translucentStyle {
    [self.navigationController.navigationBar setBackgroundImage:[self image] forBarMetrics:UIBarMetricsDefault];
}

- (UIImage *)image {
    UIGraphicsBeginImageContext(CGSizeMake(100, 100));
    
    // _scrollView = [[UIScrollView alloc] initWithFrame:CGRectMake(0, 0, self.view.frame.size.width, self.view.frame.size.height)];
    // 设置为1 会影响scrollView的bounds (0,0,width,height)
    // 少于 1  scrollView的bounds (0,64,width,height)
    [[[UIColor whiteColor] colorWithAlphaComponent:0.99] setFill]; 
    
    UIRectFill(CGRectMake(0, 0, 100, 100));
    
    UIImage *img = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();
    
    return img;
}

      另外一种方式通过修改_UIBarBackground类来进行修改透明度,稍稍复杂些

4. 黑线处理

       4.1 通过视图观察,黑线超过导航条的边框,可以通过clipToBounds来处理

               self.navigationController.navigationBar.clipsToBounds = YES;

       4.2 找到黑色的imageV ,然后设置hidden属性YES;

- (UIImageView *)findBlackLineImageV:(UIView *)view {
    if ([view isKindOfClass:[UIImageView class]] && view.frame.size.height <= 1) {
        return (UIImageView *)view;
    }
    NSArray *viewArr = view.subviews;
    for (int i = 0; i < viewArr.count; i++) {
        UIView *tempV = [self findBlackLineImageV:viewArr[i]];
        if (tempV) {
            return (UIImageView *)tempV;
        }
    }
    return nil;
}

5.  导航条按钮

      5.1  右按钮

NSMutableArray *barItems = [NSMutableArray array];
    
    UIBarButtonItem *barItem1 = [[UIBarButtonItem alloc] initWithTitle:@"111" style:UIBarButtonItemStylePlain target:self action:nil];
    UIBarButtonItem *barItem2 = [[UIBarButtonItem alloc] initWithTitle:@"222" style:UIBarButtonItemStylePlain target:self action:nil];
    UIBarButtonItem *spaceItem = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFixedSpace target:self action:nil];
    spaceItem.width = 10;
    [barItems addObject:barItem1];
    [barItems addObject:spaceItem];
    [barItems addObject:barItem2];
    self.navigationItem.rightBarButtonItems = barItems;

      5.2 左按钮

- (void)backArrowImage {
    UIImage *image = [UIImage imageNamed:@"[email protected]"];
    image = [image imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal];  //重要, 不然颜色会跟随导航条
    
    self.navigationController.navigationBar.backIndicatorImage = image;
    self.navigationController.navigationBar.backIndicatorTransitionMaskImage = image;
}

6.  导航栏隐藏

一种对view进行操作, 一种是控制器的属性(系统做了移除操作,位置改变等)

// 两种方式的不同
    self.navigationController.navigationBar.hidden = YES;
    self.navigationController.navigationBarHidden = YES;

猜你喜欢

转载自blog.csdn.net/qiutiange1205/article/details/81284102
今日推荐