導航欄原理及使用

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;

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章