UINavigationItem
UINavigationItem : NSObject
UINavigationBar 上的 标题与返回 item 的详细容器
初始化
// 一般就直接用 Nav 上的,自定义才自己初始化
UINavigationItem *item = [[UINavigationItem alloc] initWithTitle:@"标题"];
标题 item
// 主标题
self.navigationItem.title = @"新标题";
// 标题图片
self.navigationItem.titleView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"icon_100"]];
// 小标题
self.navigationItem.prompt = @"promt";
返回 item
self.navigationItem.backBarButtonItem = [[UIBarButtonItem alloc] initWithTitle:@"111" style:UIBarButtonItemStylePlain target:self action:@selector(asd)];
self.navigationItem.hidesBackButton = NO;
[self.navigationItem setHidesBackButton:YES animated:YES];
直接用 UINavigationController 上的 navigationItem 时,每次 push、pop 其实都有被设置返回 item 为栈上倒数第二个 item 的title;
额外 item,
- 左侧
UIBarButtonItem *leftItem = [[UIBarButtonItem alloc] initWithTitle:@"左边" style:0 target:self action:@selector(leftItemHandle)];
UIBarButtonItem *leftItem2 = [[UIBarButtonItem alloc] initWithTitle:@"左边2" style:0 target:self action:@selector(leftItemHandle)];
[self.navigationItem setLeftBarButtonItems:@[leftItem, leftItem2]];
UIBarButtonItem *item = self.navigationItem.leftBarButtonItem;
NSArray *items = self.navigationItem.leftBarButtonItems;
// 不重绘 backItem,默认会覆盖 backItem,且影响侧滑但会手势
self.navigationItem.leftItemsSupplementBackButton = YES;
- 右侧(同上)
iOS 11
下拉搜索
// 下拉出现搜索 VC
self.navigationItem.searchController = searchVC;
self.navigationItem.hidesSearchBarWhenScrolling = YES;
UISearchController 待深入了解;
大标题显示方式
self.navigationItem.largeTitleDisplayMode = UINavigationItemLargeTitleDisplayModeAutomatic;
结合 UINavigationBar 使用