美文网首页
UINavigationBar

UINavigationBar

作者: 翻这个墙 | 来源:发表于2017-11-22 18:28 被阅读68次

    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

          本文链接:https://www.haomeiwen.com/subject/ydyovxtx.html