在TZScrollViewPopGesture基础上进行的侧滑返回实现

在优化侧滑返回时,我尝试了很多方法,期间参考了不少资料,最后找到适合自己的方式。完全自定义导航的方式除外。
全部页面使用同一个返回按钮时,如果想要自定义其他页面的返回事件,那么建议采用设置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基础上进行的侧滑返回实现)