如何在注册流程的多个view controller中展示通用progress bar
多视图控制器通用进度条实现方案
以下是三种实测可行的实现方式:
- 方案1:将进度条添加到当前应用的
UIWindow层级
直接在最顶层的window上添加进度条视图,固定位置,不受视图控制器push/pop切换影响,进度状态全局统一管理。如果需要隐藏可以在非注册流程页面主动调用隐藏方法,注册流程内全程保持显示即可。需要注意适配刘海屏顶部/底部安全区域,避免进度条被系统元素遮挡。 - 方案2:使用父视图控制器统一管理
新增一个RegistrationFlowParentVC作为容器,内部包含两个子视图:固定位置的进度条,以及用来承载7-8个注册步骤VC的容器视图。所有注册步骤的切换都在容器视图内部完成,进度条全程在父VC层级保持不动,不会跟随子VC切换产生动画断层。这种方式比单独加container view的耦合度更低,也更方便统一管理注册流程的全局状态。 - 方案3:使用
UINavigationController分类扩展实现
给系统的UINavigationController增加添加、更新、隐藏进度条的扩展方法,注册流程全程使用同一个导航控制器,需要更新进度时直接调用当前导航控制器的进度更新方法即可。如果导航栏是隐藏状态,进度条可以直接加在导航控制器的view上,不会随子VC切换消失。
所有方案都建议单独封装一个单例的进度状态管理类,统一管理当前注册进度值,所有步骤更新进度时都修改这个单例的属性,同步更新进度条的UI表现,避免不同VC之间进度状态不同步的问题。
内容的提问来源于stack exchange,提问作者Nies
相关产品推荐
相关产品推荐

