美文网首页iOS 宝典iOS学习专题iOS高质量博客
iOS- 11设置导航条(扩展类UIBarButtonItem)

iOS- 11设置导航条(扩展类UIBarButtonItem)

作者: 麦穗0615 | 来源:发表于2016-08-23 20:43 被阅读7338次

小知识:

1.UIBarButtonItem:描述按钮具体的内容
2.UINavigationItem:设置导航条上的内容(左边,右边,中间)
3.tabBarItem:设置tabBar上的按钮内容(tabBarButton)

左右item

问题:

  • UIButton包装成UIBarButtonItem就会导致点击区域扩大


    点击区域扩大

    应该包装成UIVIew在进行添加


    包装成UIVIew
    效果图
  • 扩展类UIBarButtonItem-代码如下
    UIBarButtonItem+ZYExtension.h
    #import <UIKit/UIKit.h>
   @interface UIBarButtonItem (ZYExtension)
   + (instancetype)itemWithNorImage:(NSString *)image highImage:(NSString *)highImage target:(id)target action:(SEL)action;
   @end

UIBarButtonItem+ZYExtension.m
#import "UIBarButtonItem+ZYExtension.h"

    @implementation UIBarButtonItem (ZYExtension)
     + (instancetype)itemWithNorImage:(NSString *)image highImage:(NSString *)highImage target:(id)target action:(SEL)action
   {
       UIButton *btn = [UIButton buttonWithType:UIButtonTypeCustom];
       [btn setImage:[UIImage imageNamed:image] forState:UIControlStateNormal];
       [btn setImage:[UIImage imageNamed:highImage] forSt ate:UIControlStateHighlighted];
       [btn sizeToFit];
       [btn addTarget:target action:action forControlEvents:UIControlEventTouchUpInside];
       UIView *containVew = [[UIView alloc] initWithFrame:btn.bounds];
       [containVew addSubview:btn];
       return [[UIBarButtonItem alloc]initWithCustomView:containVew];
    }

使用方法:(例如)
self.navigationItem.leftBarButtonItem = [UIBarButtonItem itemWithNorImage:@"nav_item_game_icon" highImage:@"nav_item_game_click_icon" target:self action:@selector(game)];

设置导航条标题

  • 只要通过模型设置,都需要通过付文本设置
  • 设置导航条标题
    self.navigationItem.title = @"我的";
    NSMutableDictionary *attrs = [NSMutableDictionary dictionary];
    attrs[NSFontAttributeName] = [UIFont boldSystemFontOfSize:20];
    [self.navigationController.navigationBar setTitleTextAttributes:attrs];
  • titleVIew
    self.navigationItem.titleView = [[UIImageView alloc]initWithImage: [UIImage imageNamed:@"MainTitle"]];

片段代码:(调用)

 - (void)setupNavBar
   {
  >
   //   左边Item
               self.navigationItem.leftBarButtonItem = [UIBarButtonItem
                                                                       itemWithNorImage:@"nav_item_game_icon"
                                                                              highImage:@"nav_item_game_click_icon"
                                                                                 target:self
                                                                                 action:@selector(game)];
   //   右边Item
                 self.navigationItem.rightBarButtonItem = [UIBarButtonItem
                                                               itemWithNorImage:@"navigationButtonRandom"
                                                                            highImage:@"navigationButtonRandomClick"
                                                                                    target:self
                                                                                    action:nil];
   //   中间titleView
                self.navigationItem.titleView = [[UIImageView alloc]initWithImage:  [UIImage imageNamed:@"MainTitle"]];
   }

 - (void)setupNavBar{
//   设置
UIBarButtonItem *settingItem = [UIBarButtonItem itemWithNorImage:@"mine-setting-icon" highImage:@"mine-setting-icon-click" target:self action:@selector(setting:)];
//   夜间模式
UIBarButtonItem *nightItem = [UIBarButtonItem itemWithNorImage:@"mine-moon-icon" selImage:@"mine-moon-icon-click" target:self action:@selector(night:)];
>
//   设置
self.navigationItem.rightBarButtonItems = @[settingItem,nightItem];
//   只要通过模型设置,都需要通过富文本设置
//   设置导航条标题 ==>  UINavigationBar
NSMutableDictionary *attrs = [NSMutableDictionary dictionary];
 attrs[NSFontAttributeName] = [UIFont boldSystemFontOfSize:20];
[self.navigationController.navigationBar setTitleTextAttributes:attrs];
 }
 #pragma mark- 夜间模式以及设置点击事件
- (void)night:(UIButton *)btn{
//  选中状态-必须手动
btn.selected = !btn.selected;
}
- (void)setting:(UIButton *)btn{
}

相关文章

网友评论

  • coderYL:楼主,我也遇到了,self.navigationItem.titleView自定义titleView,宽度200,但是显示出来,实际宽度只有几十,
    a群:@Mr孙 https://stackoverflow.com/questions/44932084/ios-11-navigationitem-titleview-width-not-set/46402391#46402391 注意这里 “// the target size” 部分 是限定你自定义导航宽度大小的部分
    Mr孙:具体应该怎么写呀
  • a群:我发现 iOS 11 上面 self.navigationItem.titleView 自定义 customTitleView 设置宽度了 放在 self.navigationItem.titleView 上 宽度 又被扩展了 这个宽度设置不管用了 导致 对 两边的导航按钮有遮挡 覆盖 是否有人遇到类似的问题 如何处理
    Mr孙:@luowi 具体应该怎么写呀
    龙伟17:https://stackoverflow.com/questions/44932084/ios-11-navigationitem-titleview-width-not-set 这个好像可以解决
    龙伟17:我也遇到了 怎么解决

本文标题:iOS- 11设置导航条(扩展类UIBarButtonItem)

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