如何快速搭建iOS三栏折叠导航:PaperFoldNavigationController完整指南
2026/8/22 12:25:18 网站建设 项目流程

如何快速搭建iOS三栏折叠导航:PaperFoldNavigationController完整指南

【免费下载链接】PaperFold-for-iOSPaper folding animation for iOS项目地址: https://gitcode.com/gh_mirrors/pa/PaperFold-for-iOS

PaperFold-for-iOS 是一款经典的 iOS 纸张折叠动画控件库,其PaperFoldNavigationController让你用极少代码就能搭建出三栏控制器式折叠导航:拖动中间内容区,左右两个 View Controller 就像折纸一样展开和收拢。本文将从零带你跑通官方 NavDemo 示例,并讲清每个关键参数。

为什么选择三栏控制器式折叠导航?

常见的 iOS 侧滑菜单(如UISegmentedControl或第三方抽屉库)大多是"整体平移"效果,而 PaperFold 的卖点在于真实的纸张折叠视觉

  • 📄 折叠时会对侧栏视图做屏幕截图并分段折叠,模拟纸张弯曲
  • 💡 内置虚拟光源:朝向左侧的折面更暗,立体感强
  • 🧩 三栏结构:中间主内容 + 左侧栏 + 右侧栏,均可挂载任意UIViewController

三栏结构一览

PaperFoldNavigationController本质上是一个容器UIViewController,内部封装了核心动画视图PaperFoldView,并持有三个子控制器,定义见 PaperFoldNavigationController.h:

角色属性说明
中间栏rootViewController主内容区,占满全屏
左侧栏leftViewController左滑展开,折叠次数固定为 3 折
右侧栏rightViewController右滑展开,折叠次数、拉动系数可自定义

一键搭建:官方NavDemo的5步用法

完整示例位于 PaperFold-NavDemo/AppDelegate.m,核心搭建流程如下:

第 1 步:创建中间主控制器

把内容页(如UITableView)包进UINavigationController,作为 root:

ContentViewController *contentVC = [[ContentViewController alloc] initWithStyle:UITableViewStylePlain]; UINavigationController *nav = [[UINavigationController alloc] initWithRootViewController:contentVC];

第 2 步:初始化 PaperFoldNavigationController 并设为根控制器

PaperFoldNavigationController *foldNav = [[PaperFoldNavigationController alloc] initWithRootViewController:nav]; self.window.rootViewController = foldNav;

第 3 步:挂载左侧栏(固定宽度 150pt)

LeftViewController *leftVC = [[LeftViewController alloc] init]; UINavigationController *leftNav = [[UINavigationController alloc] initWithRootViewController:leftVC]; [leftNav setNavigationBarHidden:YES]; [foldNav setLeftViewController:leftNav width:150];

第 4 步:挂载右侧栏(宽度 250pt,3 折,拉动系数 0.9)

RightViewController *rightVC = [[RightViewController alloc] init]; UINavigationController *rightNav = [[UINavigationController alloc] initWithRootViewController:rightVC]; [rightNav setNavigationBarHidden:YES]; [foldNav setRightViewController:rightNav width:250.0 rightViewFoldCount:3 rightViewPullFactor:0.9];

第 5 步:运行—— 左右拖动中间表格,即可看到折叠动画。

💡 侧栏控制器同样可以push新页面,NavDemo 中三个表格点击后都会pushViewController,说明折叠栏内保留了完整导航能力,见 LeftViewController.m。

关键API速查:两个设置方法的区别

API行为适用场景
setLeftViewController:width:内部固定foldCount:3, pullFactor:0.9简单侧边菜单,一步到位
setRightViewController:width:rightViewFoldCount:rightViewPullFactor:可自定义折叠段数与拉开节奏需要更"绵长"折叠感的宽面板
  • foldCount(折叠次数):侧栏被拆分成几段纸折,段数越多动画越有层次感
  • pullFactor(拉动系数,0~1):控制远离中心折段的展开速度,值越小远处折段跟随越慢,"多米诺"感越强

对应实现可参考 PaperFoldNavigationController.m,底层最终调用PaperFoldViewsetLeftFoldContentView:foldCount:pullFactor:

生命周期回调:折叠状态变了怎么办?

PaperFoldNavigationController自动实现PaperFoldViewDelegate,在每次折叠状态切换时帮你转发viewWillAppear/viewDidAppear等生命周期方法,见 PaperFoldNavigationController.m。三种状态:

  1. PaperFoldStateDefault—— 收起,回到中间栏
  2. PaperFoldStateLeftUnfolded—— 左侧栏展开
  3. PaperFoldStateRightUnfolded—— 右侧栏展开

这意味着你不需要手动管理三个控制器的生命周期,子控制器里的viewDidAppear:等业务逻辑会按预期触发(NavDemo 的 RightViewController.m 中就有日志验证)。

如果想在代码中主动展开/收起(不依赖手势),可直接操作paperFoldView属性,调用setPaperFoldState:PaperFoldStateLeftUnfolded等方法,接口定义见 PaperFoldView.h。

常见问题与最佳实践

  • 中间栏是表格,手势冲突?可关闭对应方向的拖拽:[self.paperFoldView setEnableLeftFoldDragging:NO]
  • ARC 要求:本库依赖 ARC,非 ARC 项目需给源文件加-fobjc-arc编译参数(详见 PaperFold.podspec 的依赖声明)
  • 集成方式:支持 CocoaPods(pod 'PaperFold'),也可直接把PaperFold/PaperFold/PaperFold目录下的源码拖入工程
  • 侧栏宽度建议:iPhone 上左侧 150~200pt、右侧 200~280pt 视觉效果最佳,可按机型自适应调整

小结

PaperFoldNavigationController用"三控制器 + 两行配置"的模式,把复杂的纸张折叠动画封装成了接近零成本的功能:中间栏承载业务主流程,左右栏作为可折叠辅助面板,生命周期全自动管理。如果你希望 iOS 应用的导航少一些"平移菜单"的千篇一律,这套三栏控制器式折叠导航方案值得放进你的工具箱。

【免费下载链接】PaperFold-for-iOSPaper folding animation for iOS项目地址: https://gitcode.com/gh_mirrors/pa/PaperFold-for-iOS

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询