UINavigationBar

UINavigationBar : UIView
很像 UITabBar 的定位,本身是 View,被集成在 UINavigationController 中使用

初始化

    self.navBar = [[UINavigationBar alloc] initWithFrame:CGRectMake(20, 100, 300, 44)];
    self.navBar.backgroundColor = [UIColor lightGrayColor];
    [self.view addSubview:self.navBar];

item 栈管理

    self.navBar.items;// item 栈
    self.navBar.topItem;// last
    self.navBar.backItem;// last-1(last == 0 时,无 backItem)
   
    
// 入栈,很熟悉的味道
- (void)push {
    UINavigationItem *item = [[UINavigationItem alloc] initWithTitle:[NSString stringWithFormat:@"%zi", arc4random()]];
    [self.navBar pushNavigationItem:item animated:YES];
}

// 出栈
- (void)pop {
    [self.navBar popNavigationItemAnimated:YES];
}

// 设栈
- (void)setItem {
    UINavigationItem *item = [[UINavigationItem alloc] initWithTitle:[NSString stringWithFormat:@"%zi", arc4random()]];
    [self.navBar setItems:@[item]];
}

属性

     // 颜色
    self.navBar.tintColor = [UIColor redColor];
    self.navBar.barTintColor = [UIColor yellowColor];
    
    // 背景图
    [self.navBar setBackgroundImage:[UIImage imageNamed:@"icon"] forBarMetrics:UIBarMetricsDefault];
    [self.navBar setBackgroundImage:[UIImage imageNamed:@"icon_100"] forBarPosition:UIBarPositionTop barMetrics:UIBarMetricsDefault];
    
    UIImage *img1 = [self.navBar backgroundImageForBarMetrics:UIBarMetricsDefault];
    UIImage *img2 = [self.navBar backgroundImageForBarPosition:UIBarPositionBottom barMetrics:UIBarMetricsDefault];
    
    
    // 阴影
    self.navBar.shadowImage = [UIImage imageNamed:@"tab_0_normal"];
    
    // 标题富文本
    self.navBar.titleTextAttributes = @{NSFontAttributeName: [UIFont boldSystemFontOfSize:20],
                                        NSForegroundColorAttributeName: [UIColor whiteColor]
                                        };
    
    // 标题偏移
    [self.navBar setTitleVerticalPositionAdjustment:20 forBarMetrics:UIBarMetricsDefault];
    CGFloat v = [self.navBar titleVerticalPositionAdjustmentForBarMetrics:UIBarMetricsDefault];
    
    
    // 返回 图片
    self.navBar.backIndicatorImage = [UIImage imageNamed:@"tab_0_normal"];
    self.navBar.backIndicatorTransitionMaskImage = [UIImage imageNamed:@"tab_1_normal"];

UINavigationBarDelegate

- (BOOL)navigationBar:(UINavigationBar *)navigationBar shouldPushItem:(UINavigationItem *)item {
    return YES;
}

- (void)navigationBar:(UINavigationBar *)navigationBar didPushItem:(UINavigationItem *)item {
    NSLog(@"didPushItem");
}

- (BOOL)navigationBar:(UINavigationBar *)navigationBar shouldPopItem:(UINavigationItem *)item {
    return YES;
}

- (void)navigationBar:(UINavigationBar *)navigationBar didPopItem:(UINavigationItem *)item {
    NSLog(@"didPopItem");
}

iOS 11 大标题

    // 结合使用 大标题展示模式   
    self.navigationController.navigationItem.largeTitleDisplayMode = UINavigationItemLargeTitleDisplayModeAutomatic;
    
    // 设置 使用 大标题
    self.navigationController.navigationBar.prefersLargeTitles = YES;
    self.navigationController.navigationBar.largeTitleTextAttributes = @{NSFontAttributeName: [UIFont boldSystemFontOfSize:24],
                                                                         NSForegroundColorAttributeName: [UIColor purpleColor]
                                                                         };