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]
};