Swift NavigationBar隐藏后的右滑手势效果

发布时间 - 2026-01-11 03:00:29    点击率:

需求

我们在开发中经常遇见这样的需求,就是A视图没有导航,pushB视图后导航栏。然后要求可以使用iOS的系统侧滑返回功能。类似如下的功能:

问题

在处理这个需求的时候,我们一般会遇到两个问题:

右滑返回手势

ios开发中,使用push视图,系统是有默认的侧滑返回上个视图的功能。但是当我们自定义导航栏时,这个手势的事件就没有再触发,此时只要我们重新将代理设置为controller即可。

代码示例:

在BaseViewController中添加如下的代码

 //开启 push视图 右滑手势()
  fileprivate func openSwipe(){
  if(self.navigationController != nil){
    self.navigationController!.interactivePopGestureRecognizer!.delegate = self;
  }

  }

  func gestureRecognizerShouldBegin(_ gestureRecognizer: UIGestureRecognizer) -> Bool {

    if self.navigationController?.viewControllers.count == 1{
      return false;
    }
    return true;
  }

或者在BaseNavigationController中添加如下代码:

extension BaseNavigationController:UIGestureRecognizerDelegate{

  override func viewDidLoad() {
    super.viewDidLoad()
    self.interactivePopGestureRecognizer?.delegate = self
  }
  func gestureRecognizerShouldBegin(_ gestureRecognizer: UIGestureRecognizer) -> Bool {
    if self.navigationController?.viewControllers.count == 1{
      return false;
    }
    return true;
  }

}

右划返回时导航栏的隐藏问题

oc代码:

-(void)viewWillAppear:(BOOL)animated{
    [self.navigationController setNavigationBarHidden:YES animated:true];
}

-(void)viewWillDisappear:(BOOL)animated{
 [self.navigationController setNavigationBarHidden:NO animated:false];
}

Swift代码:

 override func viewWillAppear(_ animated: Bool) {
    super.viewWillAppear(false);
    self.navigationController?.setNavigationBarHidden(true, animated: true)


  }
  override func viewWillDisappear(_ animated: Bool) {
    super.viewWillDisappear(animated);
    self.navigationController?.navigationBar.isHidden = false;
  }

注意点

我们隐藏导航栏的时候,务必使用animated为true.这样在右划返回视图的时候才不会突兀,否则则会是下面的效果。刚开始滑动,导航栏就全不见了。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。


# Swift  # NavigationBar  # 右滑手势  # 使用Swift代码实现iOS手势解锁、指纹解锁实例详解  # 在Swift程序中实现手势识别的方法  # Swift中实现点击、双击、捏、旋转、拖动、划动、长按手势的类和方法介绍  # Swift在控件中添加点击手势的方法  # IOS 开发之swift中手势的实例详解  # 是有  # 自定义  # 不见了  # 可以使用  # 刚开始  # 当我们  # 上个  # 设置为  # 则会  # 大家多多  # 就全  # brush  # cpp  # class  # BaseViewController  # pre  # fileprivate  # nil  # interactivePopGestureRecognizer  # delegate 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: Laravel如何使用Service Provider注册服务_Laravel服务提供者配置与加载  广州网站制作公司哪家好一点,广州欧莱雅百库网络科技有限公司官网?  iOS中将个别页面强制横屏其他页面竖屏  Linux安全能力提升路径_长期防护思维说明【指导】  大连 网站制作,大连天途有线官网?  谷歌浏览器下载文件时中断怎么办 Google Chrome下载管理修复  Laravel如何配置Horizon来管理队列?(安装和使用)  Laravel如何配置任务调度?(Cron Job示例)  WordPress 子目录安装中正确处理脚本路径的完整指南  图册素材网站设计制作软件,图册的导出方式有几种?  javascript事件捕获机制【深入分析IE和DOM中的事件模型】  详解Android图表 MPAndroidChart折线图  进行网站优化必须要坚持的四大原则  googleplay官方入口在哪里_Google Play官方商店快速入口指南  Laravel如何为API生成Swagger或OpenAPI文档  如何确保西部建站助手FTP传输的安全性?  Laravel如何实现全文搜索功能?(Scout和Algolia示例)  网站图片在线制作软件,怎么在图片上做链接?  如何在企业微信快速生成手机电脑官网?  Mybatis 中的insertOrUpdate操作  Laravel怎么实现验证码功能_Laravel集成验证码库防止机器人注册  php嵌入式断网后怎么恢复_php检测网络重连并恢复硬件控制【操作】  如何在阿里云域名上完成建站全流程?  Laravel如何处理JSON字段的查询和更新_Laravel JSON列操作与查询技巧  ,怎么在广州志愿者网站注册?  laravel怎么配置Redis作为缓存驱动_laravel Redis缓存配置教程  Laravel如何编写单元测试和功能测试?(PHPUnit示例)  Laravel Asset编译怎么配置_Laravel Vite前端构建工具使用  开心动漫网站制作软件下载,十分开心动画为何停播?  Laravel如何使用Telescope进行调试?(安装和使用教程)  浅析上传头像示例及其注意事项  Laravel表单请求验证类怎么用_Laravel Form Request分离验证逻辑教程  Laravel怎么写单元测试_PHPUnit在Laravel项目中的基础测试入门  软银砸40亿美元收购DigitalBridge 强化AI资料中心布局  HTML5建模怎么导出为FBX格式_FBX格式兼容性及导出步骤【指南】  轻松掌握MySQL函数中的last_insert_id()  七夕网站制作视频,七夕大促活动怎么报名?  中国移动官方网站首页入口 中国移动官网网页登录  如何制作公司的网站链接,公司想做一个网站,一般需要花多少钱?  Laravel怎么为数据库表字段添加索引以优化查询  javascript中的数组方法有哪些_如何利用数组方法简化数据处理  PHP 500报错的快速解决方法  Laravel怎么判断请求类型_Laravel Request isMethod用法  Linux系统命令中screen命令详解  EditPlus中的正则表达式实战(5)  Laravel如何自定义错误页面(404, 500)?(代码示例)  ,在苏州找工作,上哪个网站比较好?  Laravel如何使用Laravel Vite编译前端_Laravel10以上版本前端静态资源管理【教程】  制作网站软件推荐手机版,如何制作属于自己的手机网站app应用?  Laravel怎么实现搜索功能_Laravel使用Eloquent实现模糊查询与多条件搜索【实例】