项目优化--导航栏标签栏

前言

开发了一年的项目准备优化,现在整理下,在尽量不更换大东西的情况下修改代码,由于项目之前创建了基类,现在优化起来还是挺简单的

操作方法

隐藏标签栏的正确姿势(在导航栏控制器中)

/**重写push方法,让二级界面都没有标签栏*/
- (void)pushViewController:(UIViewController *)viewController animated:(BOOL)animated
{
    if (self.viewControllers.count > 0) {
        viewController.hidesBottomBarWhenPushed = YES;
    }
    [super pushViewController:viewController animated:animated];
}

隐藏导航栏

-(void)viewWillAppear:(BOOL)animated{
    [super viewWillAppear:animated];
    //先设置当前控制器为代理
    self.navigationController.delegate = self;
}
//执行的代理方法
- (void)navigationController:(UINavigationController *)navigationController willShowViewController:(UIViewController *)viewController animated:(BOOL)animated {
    
    //需要隐藏导航栏的控制器
    BOOL hidden = ![self classNameArray:@[@"MouoMeUserCenterController",@"KSPhotoBrowser",@"ChatRedPacketController",@"MerchantDetailController",@"MouoGroupDetailsController",@"MouoGroupModifyController",@"MouoLiveRoomControler",@"NearbyTimerController",@"NearbyTimeUserInfoController",@"PersonalDetailController"]];
    [self.navigationController setNavigationBarHidden:hidden animated:YES];
}
//判断当前控制器是否是数组中的名字
- (BOOL)classNameArray:(NSArray *)array {
    BOOL reslut = YES;
    for (NSString *string in array) {
        const char *className = [string cStringUsingEncoding:NSASCIIStringEncoding];
        Class newClass = objc_getClass(className);
        if ([self isKindOfClass:newClass]) {
            reslut = NO;
        }
    }
    return reslut;
}

至于隐藏导航栏后不能右滑返回我则是用的UIViewController+BackButtonHandler

使用它的时候也遇到过一些问题,在二级页面右滑返回一级界面的时候若一级界面有点击事件有可能触发然后造成界面卡死,需要在一级界面加上禁止返回手势的操作

- (void)viewDidAppear:(BOOL)animated {
    [super viewDidAppear:animated];
    // 禁用返回手势
    if ([self.navigationController respondsToSelector:@selector(interactivePopGestureRecognizer)]) {
        self.navigationController.interactivePopGestureRecognizer.enabled = NO;
    }
}

- (void)viewWillDisappear:(BOOL)animated {
    [super viewWillDisappear:animated];
    if ([self.navigationController respondsToSelector:@selector(interactivePopGestureRecognizer)]) {
        self.navigationController.interactivePopGestureRecognizer.enabled = YES;
    }
}

总结

为什么不用第三方的呢,确实,我在网上也看到很多别人写的代码很不错,但若用在我的项目中就会改很多东西
比如RTRootNavigationController,SmoothNavDemo,JTNavigationController都是很不错的框架,但在用他们的时候最好在项目开始的时候就使用,不然后面就只能参考下然后根据自己的实际情况使用

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 161,526评论 24 692
  • 问答题47 /72 常见浏览器兼容性问题与解决方案? 参考答案 (1)浏览器兼容问题一:不同浏览器的标签默认的外补...
    _Yfling阅读 12,525评论 1 91
  • 发现 关注 消息 iOS 第三方库、插件、知名博客总结 作者大灰狼的小绵羊哥哥关注 2017.06.26 09:4...
    肇东周阅读 7,952评论 4 42
  • 时间就像握在手中的流沙,握得越紧,流得越快。 从创立“蒙自大枇杷”公众号至今,已经流走了几百个日日夜夜 我曾经是一...
    四季果源阅读 140评论 0 0
  • 前言:下面为各位看客介绍微信支付的开发流程细节,图文全方位解析,解决下我遇见的种种坑....... 老规矩嘛,动手...
    日怪的产品汪阅读 777评论 1 4
  • 这个世界,最难说服的,是我们自己。 说好该去休假了,却为一笔买卖,取消了酝酿已久的行程;说好要看淡得失名利了,...
    快乐使者_阅读 233评论 0 0
  • '妹妹,快点呀,来追我吧!一位扎着粉红色马尾辫的小女孩在自家的花园了跑着,她就是安雨萱。 '姐姐,你跑慢点,苡柔追...
    榆亭阅读 178评论 0 1
  • 本不想让我的第一篇简书变成煽情篇,但谁让我有个女儿呢?🤗 今天刚回家女儿开门后就对我说:“妈妈我觉的你越来越爱我...
    Lyla_e204阅读 224评论 0 0