UINavigationBar

UINavigationBar(导航条)

  1. 父类是UIView
  • 一个UINavigationController(导航控制器)只有一个导航条,子控制器共用同一个导航条
  • 导航条不一定是由导航控制器本身设置的
  • 导航控制器的导航条高度是44,宽度与屏幕同齐;背景高64,宽度与屏幕同齐

导航控制器与导航条(navigationBar)

  1. 导航条本身内容(背景图片设置等),由导航控制器设置;子控制器要设置,需要拿到navigationController.navigationBar设置

  2. 一般是在initilize统一设置

    #pragma mark - initilize
    + (void)initialize
    {
        [super initialize];
    
        // 判断是否是导航控制器本身,子类也返回
        if(self != [BSNachildViewControllerontroller class])return;
    
        // 获取UINavigationBar外观
        UINavigationBar *bar;
    
        // 版本适配
        if (IOS_VERSION < 9.0) {
    
            // 只获取这个类本身的导航条,其他导航控制器的导航条不获取
            bar = [UINavigationBar appearanceWhenContainedIn:self, nil];
        }else {
            bar = [UINavigationBar appearanceWhenContainedInInstancesOfClasses:@[self]];
        }
    
        // 背景图片
        [bar setBackgroundImage:[UIImage zq_loadImageWithContentsOfFileName:@"navigationbarBackgroundWhite"] forBarMetrics:UIBarMetricsDefault];
    
    }
    

导航条(navigationBar)内部内容(navigationItem):

  1. 设置栈顶控制器的导航条标题(navigationItem.title),直接拿到UINavigationItem设置title.
    childViewController.navigationItem.title = @"导航条标题";
    
  • 设置navigationItem的titleView,控件位置由系统决定,只能设置尺寸。

    childViewController.navigationItem.titleView = [[UIImageView alloc] initWithImage:image];
    
  • 导航条左右两边按钮模型(UIBarButtonItem):

    1. 导航条左右两边按钮通过UIBarButtonItem类型的模型管理,修改模型就会修改按钮
    // 返回按钮
    childViewController.navigationItem.backBarButtonItem = [[UIBarButtonItem alloc]initWithImage:[UIImage imageNamed:@"CS50_activity_image"] style:UIBarButtonItemStyleDone target:self action:@selector(action)];
    
    // 左边的按钮
    childViewController.navigationItem.leftBarButtonItem = [[UIBarButtonItem alloc]initWithImage:[UIImage imageNamed:@"CS50_activity_image"] style:UIBarButtonItemStyleDone target:self action:@selector(action)];
    
    // 右边的按钮
    childViewController.navigationItem.rightBarButtonItem = [[UIBarButtonItem alloc]initWithImage:[UIImage imageNamed:@"CS50_activity_image"] style:UIBarButtonItemStyleDone target:self action:@selector(action)];
    
    // 创建模型
    UIBarButtonItem *item0 = [[UIBarButtonItem alloc]initWithCustomView:[[UIImageView alloc] initWithImage:image];
    UIBarButtonItem *item1 = [[UIBarButtonItem alloc]initWithCustomView:[[UIImageView alloc] initWithImage:image];
    
    // 左边的按钮数组
    childViewController.navigationItem.leftBarButtonItems = @[item0,item1];
    
    // 右边的按钮数组
    childViewController.navigationItem.rightBarButtonItems = @[item0,item1];
    

** 注意:在iOS7之后,默认会将导航条上按钮的图片渲染成蓝色,解决方案详见UIImage**

导航条上的返回按钮

  • 由上一个控制器决定。
    1. 如果上一个控制器没有设置标题,默认back
    • 如果上一个控制器设置标题,并且没有超过12个字符,默认返回标题和上一个控制器一致,如果超过12个字符,就会变成back。
    • 修改返回按钮设置上一个控制器的backBarButtonItem属性,或者设置自身的leftBarButtonItem属性
    // 设置上一个控制器的backBarButtonItem
    childViewController.navigationItem.backBarButtonItem = [[UIBarButtonItem alloc]initWithImage:[UIImage imageNamed:@"CS50_activity_image"] style:UIBarButtonItemStyleDone target:self action:@selector(action)];
    
    // 设置自身的leftBarButtonItem属性
    pushViewController.navigationItem.leftBarButtonItem = [[UIBarButtonItem alloc]initWithImage:[UIImage imageNamed:@"CS50_activity_image"] style:UIBarButtonItemStyleDone target:self action:@selector(action)];
    
    • 覆盖了系统的返回按钮,侧滑返回功能也会消失,恢复该功能请见拖动手势-边缘侧滑返回手势

你可能感兴趣的:(UINavigationBar)