美文网首页
在TZScrollViewPopGesture基础上进行的侧滑返

在TZScrollViewPopGesture基础上进行的侧滑返

作者: 最晴天 | 来源:发表于2017-06-14 17:28 被阅读85次

    在优化侧滑返回时,我尝试了很多方法,期间参考了不少资料,最后找到适合自己的方式。完全自定义导航的方式除外。
    全部页面使用同一个返回按钮时,如果想要自定义其他页面的返回事件,那么建议采用设置leftBarButtonItem的方式,并设置backBarButtonItem的标题为空,且隐藏;如果不需要自定义goBack的返回事件,仅仅是更改返回按钮的样式,建议采用backBarButtonItem的方式。

    设置leftBarButtonItem:

      UIBarButtonItem *leftItem = [[UIBarButtonItem alloc]initWithImage:[UIImage imageNamed:@"back"] style:UIBarButtonItemStylePlain target:self action:@selector(goBack)];
        leftItem.title = @"";
        self.navigationItem.leftBarButtonItem = leftItem;
    

    这一种设置方式,不知道为什么我在测试的时候,当设置navigationBar.translucent为YES时,在极少数的情况下会出现leftBarButtonItem从原位置向下偏移;但采用initWithCustomView的方式就不会出现这样的情况。私以为这是一个很神奇的事情,如果有知道原因的,请一定要告诉我。
    我最后使用的是设置leftBarButtonItems的方式,可以调整返回按钮距离左侧的位置。

    UIBarButtonItem *spaceItem = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFixedSpace target:self action:nil];
        //spaceItem宽度为负值,相当于左移
        spaceItem.width = -23;
        // 初始化一个返回按钮
        UIButton *button = [[UIButton alloc] initWithFrame:CGRectMake(0, 0, 44, 44)];
        // 为返回按钮设置图片样式
        [button setImage:[[UIImage imageNamed:@"back"] imageWithRenderingMode:UIImageRenderingModeAutomatic] forState:UIControlStateNormal];
        // 设置返回按钮触发的事件
        [button addTarget:self action:@selector(goBack) forControlEvents:UIControlEventTouchUpInside];
        
        // 初始化一个BarButtonItem,并将其设置为返回的按钮的样式
        UIBarButtonItem *backButton = [[UIBarButtonItem alloc] initWithCustomView:button]; 
       self.navigationItem.leftBarButtonItems = @[spaceItem,backButton];
    

    设置backBarButtonItem:

       [self.navigationController.navigationBar setBackIndicatorImage:[UIImage imageNamed:@"back"]];
     [self.navigationController.navigationBar setBackIndicatorTransitionMaskImage:[UIImage imageNamed:@"back"]];
        UIBarButtonItem *backItem = [[UIBarButtonItem alloc] initWithTitle:@"" style:UIBarButtonItemStylePlain target:self action:nil];
        backItem.title = @"";
        self.navigationItem.backBarButtonItem = backItem;
    
    

    我在项目中使用TZScrollViewPopGesture来实现侧滑返回,但其中某些方面未能达到想要的效果,因此对其进行了修改:
    1.在不影响其他页面侧滑返回的基础上,使特定页面不支持侧滑返回;
    2.可设置导航的透明度;
    3.侧滑返回时,透明导航和不透明导航之间的平滑返回;

    在使用中,设置hh_navBgColor时,使用的是RGB的颜色值,否则在通过导航的背景色,去改变透明度时,在重新获取rgb的颜色值时,会造成取值不准确的问题。
    当特定页面不需要支持侧滑返回时,在viewWillAppear设置self.navigationController.hh_supportLeftBack = NO;就可以了。但要注意其他支持侧滑的页面同样需要在在viewWillAppear设置self.navigationController.hh_supportLeftBack = YES;

    github地址:https://github.com/HannahZheng/HHNavigationconSupportLeftBack

    参考:
    https://juejin.im/entry/57fcd57a67f356005886e867
    http://www.cocoachina.com/ios/20161008/17695.html
    http://www.cocoachina.com/ios/20161008/17695.html
    http://www.jianshu.com/p/fddc4ee4bc1f

    相关文章

      网友评论

          本文标题:在TZScrollViewPopGesture基础上进行的侧滑返

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