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

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

作者: X勒个F | 来源:发表于2016-06-03 11:47 被阅读1450次

现今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];
}
  • 有时候我们设置了图片看不到想要的效果,这是因为系统会对图片进行渲染,这时我们就要设置图片显示的模式为原图,如图


    51CE00E2-4694-4831-8879-5A0E8AAB7A80.jpeg

    再贴一张效果图

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;

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

相关文章

网友评论

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

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