You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

调用self.view.removeFromSuperview()移除UIPageViewController后黑屏,无法返回HomeViewController

解决UIPageViewController移除后黑屏的问题

老哥,这个坑我之前也踩过!你只调用self.view.removeFromSuperview()是没用的——你只是把页面视图删了,但UIPageViewController和HomeViewController的父子控制器关系还没解除,系统不知道该回到Home的界面,自然就黑屏了。

下面给你两种正确的处理方式,对应不同的场景:

场景1:UIPageViewController是HomeVC的子控制器

如果是HomeVC通过addChild(_:)把它作为子控制器添加进来的,那得同步解除控制器绑定+移除视图:

// 先通知系统子控制器即将脱离父控制器,触发生命周期收尾
self.willMove(toParent: nil)
// 正式解除父子控制器关系
self.removeFromParent()
// 最后移除视图
self.view.removeFromSuperview()

别跳过willMove(toParent: nil),这一步会让系统正确调用子控制器的viewWillDisappear等生命周期方法,避免内存泄漏或者奇怪的界面bug。

场景2:UIPageViewController是通过导航栈push进来的

如果是用navigationController?.pushViewController(...)跳转到这个页面的,那根本不用手动删视图,直接用导航栈的返回方法就行:

// 回到上一个页面(也就是HomeVC)
self.navigationController?.popViewController(animated: true)
// 如果HomeVC是导航根控制器,也可以直接回到根页面
self.navigationController?.popToRootViewController(animated: true)

为啥之前会黑屏?

简单来说:你只修改了视图层级,但控制器的绑定关系没更新。系统认为当前活跃的控制器还是UIPageViewController,但它的视图已经被移除了,没有可显示的内容,就只能显示黑屏了。必须同时处理控制器和视图的绑定关系,系统才会重新渲染HomeViewController的界面。

内容的提问来源于stack exchange,提问作者Hafiz Shoaib Awan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 03:13:04