添加至rootViewController的子视图控制器ViewDidAppear未调用问题求助
解决子视图控制器ViewDidAppear未触发的问题
这个坑我之前踩过!你当前的代码只完成了子VC的添加,但没做好UIKit子视图控制器生命周期的完整衔接,这就是viewDidAppear没被调用的核心原因。
问题根源
UIKit对父子VC的管理有一套严格的生命周期触发规则:仅仅调用addChildViewController(或iOS11+的addChild)只会把子VC加入父VC的管理列表,但不会自动触发子VC的viewDidAppear等视图生命周期方法——你需要手动通知子VC它已经完成了父容器的衔接。
修正后的完整代码
guard let window = UIApplication.shared.keyWindow, let rootVC = window.rootViewController else { return } // 1. 将子VC添加到父VC的管理中 rootVC.addChild(attachmentViewController) // iOS11+用addChild,低版本用addChildViewController // 2. 添加子VC的视图到父视图并布局 rootVC.view.addSubview(attachmentViewController.view) attachmentViewController.view.snp.makeConstraints { make in // 根据你的需求设置布局,比如全屏覆盖 make.top.bottom.left.right.equalTo(rootVC.view) } // 3. 关键步骤:通知子VC已完成父容器衔接,触发生命周期方法 attachmentViewController.didMove(toParent: rootVC)
额外注意点
- 如果你后续需要移除这个子VC,也要遵循完整的生命周期流程:先调用
attachmentViewController.willMove(toParent: nil),移除视图,最后调用attachmentViewController.removeFromParent() - 确保你的
attachmentViewController没有被提前释放,最好用强引用持有它(比如在父VC中声明一个属性var attachmentVC: UIViewController?来保存)
内容的提问来源于stack exchange,提问作者Tometoyou
相关产品推荐
相关产品推荐

