调用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
相关产品推荐
相关产品推荐

