iOS導航欄基礎效果配置

  • 標題設置
self.navigationItem.title = @"標題";
複製代碼

正常狀況下,控制器的標題會默認做爲導航標題bash

  • 前景色
self.navigationController.navigationBar.barTintColor = [UIColor blueColor];
複製代碼
  • 背景色
//注意上層有毛玻璃遮擋
self.navigationController.navigationBar.backgroundColor = [UIColor blueColor];
複製代碼
  • 背景圖
[self.navigationController.navigationBar setBackgroundImage:[UIImage imageNamed:@"Background"] forBarMetrics:UIBarMetricsDefault];
複製代碼
  • 狀態欄字體顏色和隱藏

在iOS7以前微信

[[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent]; 
[[UIApplication sharedApplication] setStatusBarHidden:YES];
複製代碼

iOS7以後app

- (UIStatusBarStyle)preferredStatusBarStyle {  
    return UIStatusBarStyleLightContent;  
}  
  
- (BOOL)prefersStatusBarHidden {  
    return YES;  
} 
複製代碼

若iOS7以後仍要使用第一種方法全局設置,則須要在plist文件中添加View controller-based status bar appearance 字段,值爲NO ,意爲不使用控制器管理狀態欄。ide

  • 設置返回按鈕
//只設置顏色
self.navigationController.navigationBar.tintColor = [UIColor orangeColor];
複製代碼
//設置成圖片
UIImage *leftButtonImage = [[UIImage imageNamed:@"image"]
                               imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal];
                            
self.navigationItem.leftBarButtonItem = [[UIBarButtonItem alloc] initWithImage:leftButtonImage
 style:UIBarButtonItemStyleBordered target:self action:@selector(back)];
複製代碼
//設置成文字
self.navigationItem.leftBarButtonItem = [[UIBarButtonItem alloc] initWithTitle:@"返回"style:UIBarButtonItemStylePlain target:self action:@selector(back)];
複製代碼
//自定義視圖
self.navigationItem.leftBarButtonItem = [[UIBarButtonItem alloc] initWithCustomView:view];
複製代碼
  • 修復navigationController側滑手勢失效的問題
self.navigationController.interactivePopGestureRecognizer.delegate = (id)self;
 // 控制手勢在根控制器時不觸發
- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch{
    return self.childViewControllers.count > 1;
}
複製代碼
  • 導航欄透明和底部分隔線
//設置透明的背景圖,便於識別底部線條有沒有被隱藏
[navigationBar setBackgroundImage:[[UIImage alloc] init] forBarPosition:UIBarPositionAny
                           barMetrics:UIBarMetricsDefault];
//此處使底部線條透明
[navigationBar setShadowImage:[UIImage new]];
複製代碼

另外能夠經過顏色轉圖片來修改導航條底部分隔線顏色字體

//動態地改變UIColor的alpha屬性能夠返回,不一樣alpha的圖片;可用於動態改變導航條的透明度
+ (UIImage *)imageWithColor:(UIColor *)color{
    CGRect rect = CGRectMake(0.0f, 0.0f, 1.0f, 1.0f);
    UIGraphicsBeginImageContext(rect.size);
    CGContextRef context = UIGraphicsGetCurrentContext();

    CGContextSetFillColorWithColor(context, [color CGColor]);
    CGContextFillRect(context, rect);

    UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();
    return image;
}

複製代碼
  • 全局設置導航欄外觀
//全局設置導航欄主題,只在AppDelegate中有效,
或者是UINavagaitonController中的RootController 中設置有效
- (void)setNavigationControllerAppearance {
    [UINavigationBar appearance].barStyle  = UIBarStyleBlack;
    [[UINavigationBar appearance] setBarTintColor:[UIColor colorWithWhite:0.1 alpha:0.5]];
    [[UINavigationBar appearance] setTintColor:[UIColor whiteColor]];
}

//也能夠設置成圖片
[[UINavigationBar appearance] setBackgroundImage:[UIImage imageNamed:@"nav"] forBarMetrics:UIBarMetricsDefault];
[self.navigationController.navigationBar setBackgroundImage:[UIImage imageNamed:@"nav"]  forBarMetrics:UIBarMetricsDefault];
複製代碼
  • 在導航欄上添加多個按鈕
//方法二
        UIButton* leftButton = [UIButton buttonWithType:UIButtonTypeSystem];
        leftButton.backgroundColor = [UIColor clearColor];
        leftButton.frame = CGRectMake(0, 0, 45, 40);
        [leftButton setImage:[UIImage imageNamed:@"LeftButton_back_Icon"] forState:UIControlStateNormal];
        [leftButton setTitle:@"返回" forState:UIControlStateNormal];
        leftButton.tintColor = [UIColor whiteColor];
        leftButton.autoresizesSubviews = YES;
        leftButton.contentHorizontalAlignment = UIControlContentHorizontalAlignmentLeft;
        leftButton.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleLeftMargin;
        [leftButton addTarget:self action:@selector(goToBack) forControlEvents:UIControlEventTouchUpInside];
        UIBarButtonItem* backItem = [[UIBarButtonItem alloc] initWithCustomView:leftButton];

        self.navigationItem.leftBarButtonItems = @[backItem,closeItem];
複製代碼
  • 隱藏導航欄
self.navigationController.navigationBar.hidden = YES;
複製代碼
  • 導航欄的動態消失
if (scrollView.contentOffset.y > 64) {
    [self.navigationController setNavigationBarHidden:YES animated:YES];
}else{
    [self.navigationController setNavigationBarHidden:NO animated:YES];
}
複製代碼

注意:兩種方法都是能夠隱藏導航欄的,隱藏以後依然能夠使用push和pop方法。可是若是用navigationBar.hidden隱藏導航欄,咱們能夠繼續使用navigationBarHidden提供的滑動pop效果,若是用navigationBarHidden,這個操做將無效;但前者navigationBar.hidden沒有系統自動的動畫效果。動畫

  • 狀態欄的自適應問題
//不讓其自動調整
self.automaticallyAdjustsScrollViewInsets = NO;
複製代碼

筆者和朋友作了一個小副業,微信公衆號,替你省錢,分享還能賺點小錢; 幫忙關注,支持一下,權當請我喝咖啡,謝謝。 若是很差用,能夠取消。 ui

微信公衆號
相關文章
相關標籤/搜索