控制器生命周期细节讲解

许多APP都采用了侧滑控制器代替导航栏返回操作,不知道的效果伴们参考下面代码。

一、实现侧滑返回

第一步:在根导航栏控制器中加入如下代码:

id target = self.interactivePopGestureRecognizer.delegate;

    

    UIPanGestureRecognizer *pan = [[UIPanGestureRecognizer alloc] initWithTarget:target action:@selector(handleNavigationTransition:)];

    pan.delegate = self;

    [self.view addGestureRecognizer:pan];

    

    self.interactivePopGestureRecognizer.enabled = NO;


第二步:遵守代理方法、并实现代理方法

@interface LenNavigationController ()<UIGestureRecognizerDelegate>


- (BOOL)gestureRecognizerShouldBegin:(UIGestureRecognizer *)gestureRecognizer {

    if (self.childViewControllers.count == 1)

    {

        return NO;

    }

    return YES;

}


别以为这样就可以了,接下来你可能会遇到一些侧滑返回的问题,小编我就遇到了,测试不停的提bug过来,简直快爆炸了。

这种侧滑如果所有页面都有显示导航栏的话基本不用做下面的操作,怕就怕有些地方需要隐藏导航栏,全屏显示页面,不用担心,新编教你一招。


二、侧滑返回导致导航栏标题显示错误

一级页面没有显示导航栏,二级页面显示导航栏,在侧滑返回拖拽不完全时,导航栏上的标题惨不忍睹,解决办法就是我们需要在控制器UIViewController中添加视图生命周期方法ViewWillApper  ViewWillDisapper,页面出现和消失,相信很多初级开发者都是直接写代码了,一般不会添加代码:

[super viewWillDisappear:animated];

[ super viewWillAppear:animated];
切记,不管什么时候都要添加这行代码,重写父类的方法。在本文中这是关键的一步

animated,在页面生命周期方法中都会传来这个值,animated就是上一个视图显示或消失时的动画,也可以说是状态,我们要做的就是记下这个状态,在页面即将消失或者出现时用上,页面就不会出现一些显示问题。直接上代码:

1⃣️[self.navigationController setNavigationBarHidden:NO animated:animated];//以页面消失为例

不建议用下面代码:

2⃣️self.navigationController.navigationBarHidden = NO;

代码2⃣️就会导致侧滑时导航栏标题显示错误,push到子页面时,导航栏标题还是上一个页面的。具体为什么会出现这个问题,小编一开始也没搞懂,一万个为什么从眼前飘过,后面经过调试,找到解决方法就是方法1⃣️,然后在需要的地方添加这行代码,此类测试的bug瞬间就解决了。


不知道各位大神or菜鸟们你们是否也遇到同样的问题,如果看了我写的还不明白的可以加Q363819948联系,小编是非常乐意与您交流的技术的








评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值