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 使用