加入收藏 | 设为首页 | 会员中心 | 我要投稿 52刷机网 (https://www.52shuaji.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 苹果频道 > 苹果资讯 > 正文

iOS Navigation导航栏

发布时间:2017-05-19 19:24:33 所属栏目:苹果资讯 来源:www.jianshu.com
导读:在iOS开发过程中,导航栏是最为经常用到的控件,处理不好总会出现一些瑕疵或者bug,写这篇文章旨在为自己记录平时所用有关Navigation一些操作或者说是小技巧。下文涉及到的push逻辑都是从A页面push到B页面,我会直接以A、B介绍...
副标题[/!--empirenews.page--]

在iOS开发过程中,导航栏是最为经常用到的控件,处理不好总会出现一些瑕疵或者bug,写这篇文章旨在为自己记录平时所用有关Navigation一些操作或者说是小技巧。下文涉及到的push逻辑都是从A页面push到B页面,我会直接以A、B介绍...

在iOS开发过程中,导航栏是最为经常用到的控件,处理不好总会出现一些瑕疵或者bug,写这篇文章旨在为自己记录平时所用有关Navigation一些操作或者说是小技巧。下文涉及到的push逻辑都是从A页面push到B页面,我会直接以A、B介绍

一、关于返回Item

默认从A—>B(push),B中返回按钮的title显示的是A的标题,当A的标题过长,会显示返回(back)。A标题长同时B标题也长,就会出现B标题被挤到右边了,这就尴尬了。如下图

iOS Navigation导航栏
B标题未正常显示

网上有说在A的viewWillDisappear将A的标题设置成空的,在viewDidAppear方法中再将标题设置原来的,但是这个在手势侧滑过程中显示会有问题,这里就不做演示了。这里提供一个解决方案:让A控制器继承自BaseViewController(自己创建的控制器),在BaseViewController做以下操作:

- (void)viewDidLoad {     [super viewDidLoad];     UIBarButtonItem *backItem = [[UIBarButtonItem alloc] initWithTitle:@"返回"                                                                  style:UIBarButtonItemStyleDone                                                                 target:self                                                                 action:nil];     self.navigationItem.backBarButtonItem = backItem; }
iOS Navigation导航栏
正常显示

有时我们并不需要显示title,在上图中的“返回”设置成 nil 就可以解决问题。当然我们刚才并没有改变返回的图片都是用系统默认的,如果只是单纯的显示自定义的返回图标(需求就是这么样,有什么办法),那么问题来了,怎么设置比较合理。以下给出几种方案:

1、设置navigationItem的leftBarButtonItem(不推荐)
UIBarButtonItem *backItem = [[UIBarButtonItem alloc] initWithImage:[UIImage imageNamed:@"navigation_back"]                                                              style:UIBarButtonItemStylePlain                                                             target:self                                                             action:@selector(p_actionBack)]; self.navigationItem.leftBarButtonItem = backItem;
iOS Navigation导航栏
自定义返回按钮

只是添加leftBarButtonItem侧滑手势被禁止了,图标离左侧有一定距离,经过如下修改:

- (void)p_addBackItem {     //间隙     UIBarButtonItem *spaceItem = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFixedSpace target:self action:nil];     //spaceItem宽度为负值,相当于左移     spaceItem.width = -8;     UIBarButtonItem *backItem = [[UIBarButtonItem alloc] initWithImage:[UIImage imageNamed:@"navigation_back"]                                                                  style:UIBarButtonItemStylePlain                                                                 target:self                                                                 action:@selector(p_actionBack)];     self.navigationItem.leftBarButtonItems = @[spaceItem, backItem];     //设置代理,添加leftBarButtonItem系统的侧滑手势会被禁     if ([self.navigationController respondsToSelector:@selector(interactivePopGestureRecognizer)]) {        self.navigationController.interactivePopGestureRecognizer.delegate = self;     } }  - (void)p_actionBack {     [self.navigationController popViewControllerAnimated:YES]; }  #pragma mark - UIGestureRecognizerDelegate - (BOOL)gestureRecognizerShouldBegin:(UIGestureRecognizer *)gestureRecognizer {     return YES; }
iOS Navigation导航栏
自定义
2、将title移出视图外,从而达到隐藏的效果(推荐,作用范围全局)

注意:这个需要在AppDelegate设置才有效

- (void)initBars {     UIImage *backImage = [UIImage imageNamed:@"navigation_back"];     UINavigationBar *navigationbar = [UINavigationBar appearance];     [navigationbar setBackIndicatorImage:backImage];     [navigationbar setBackIndicatorTransitionMaskImage:backImage];     [[UIBarButtonItem appearance] setBackButtonTitlePositionAdjustment:UIOffsetMake(0, -60)                                                          forBarMetrics:UIBarMetricsDefault]; }
iOS Navigation导航栏
设置偏移量,替换系统返回按钮
iOS Navigation导航栏
上一页标题过长

对比可以发现,第一张图是标题比较短的时候显示正常,第二张图是标题比较长的时候标题被往右挤了。

iOS Navigation导航栏
视图下查看

这个方法只是将返回Item的title移出,宽度并没有改变,所以在使用这个方法时一定要注意,我一般是配合一开始提到的搭配使用。如果有更好的解决方法可以留言告知,不胜感激。

二、Navigation显示或隐藏

项目中一般有一两个页面比较特殊,需要隐藏导航栏或者导航栏需要根据滑动渐变,如登录页面需要隐藏导航栏。隐藏简单,拿起键盘就是干。

1、隐藏导航栏

(编辑:52刷机网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

推荐文章
    热点阅读