关于重写导航栏返回按钮以及手势返回的诸多问题

2016-06-03  本文已影响1450人  X勒个F

现今APP开发中,定制导航栏的样式应该算是必须的需求了。个人认为系统的导航栏效果不如将导航栏隐藏,重新一个view当做导航栏的效果好看。当然,这种事情见仁见智。在使用系统导航栏时遇到过的问题,诸如返回按钮不美观,侧滑返回失效,导航栏的隐藏显示,以及最严重的一个,手势返回到一半又停留在当前页面,往后push的每一个页面title都变成了之前的那个页面。郑重推荐一个开源框架--FDFullscreenPopGesture,如丝般顺滑,谁用谁知道。

框架在此不多赘述,解决方案如下。主要思路是将一个由UINavigationController包含的UIViewController(需要UITabBarController同理)设置为window的rootViewController作为首页,首页可以自由定制。接下来的每一个控制器则使用继承自UIViewController的基控制器,如 @interface BasicViewController : UIViewController,这里只给出重写返回按钮的代码。

- (void)viewDidLoad {
    [super viewDidLoad];
    [self setUpNav];
}
- (void)setUpNav
{
    UIButton *leftBarBtn = [UIButton buttonWithType:UIButtonTypeCustom];
    [leftBarBtn setImage:[UIImage imageNamed:@"返回按钮 copy 2"] forState:UIControlStateNormal];
    leftBarBtn.frame = CGRectMake(0, 0, 44, 44);
    leftBarBtn.contentHorizontalAlignment = UIControlContentHorizontalAlignmentLeft;
    leftBarBtn.contentEdgeInsets = UIEdgeInsetsMake(0, -10, 0, 0);
    self.navigationItem.leftBarButtonItem = [[UIBarButtonItem alloc] initWithCustomView:leftBarBtn];
    [leftBarBtn addTarget:self action:@selector(backAction) forControlEvents:UIControlEventTouchUpInside];
}
- (void)backAction
{
    [self.navigationController popViewControllerAnimated:YES];
}
26E33F23-CE54-4A8E-9A45-C61FAB5B5E40.png

接下来说一下上面介绍的框架-- FDFullscreenPopGesture的一些用法,它除了添加了全屏手势返回外,还有以下特别好用的属性。

@property (nonatomic, assign) BOOL fd_interactivePopDisabled;
@property (nonatomic, assign) BOOL fd_prefersNavigationBarHidden;

前者可以在任意界面上控制侧滑手势

//设为YES取消返回手势
self.fd_interactivePopDisabled = YES;

后者则可以完美控制导航栏的隐藏与否

self.fd_prefersNavigationBarHidden = YES;

这样一来就不用在视图将要出现或消失时写一堆繁琐的代码了

上一篇 下一篇

猜你喜欢

热点阅读