Swift项目中ViewController除导航栏外黑屏问题求助
问题分析与解决方法
嘿,我一眼就瞅见问题出在哪啦!你的ViewController类继承的是UINavigationController,但你完全没给这个导航控制器设置根视图控制器,这就导致它的内容区域是空的,自然只会显示导航栏,下面全是黑屏啦😅
为什么会这样?
UINavigationController是个容器控制器,它的作用是管理导航栈里的多个视图控制器,本身并不负责展示具体内容。如果不给它指定根VC,它就没有可展示的内容,内容区域就会是黑色的空视图。
两种解决思路,选适合你的:
1. 如果你本来就不需要导航控制器
直接把类的继承改成UIViewController——毕竟看起来你这个VC是想做普通的页面:
import UIKit class ViewController: UIViewController { // 这里修改继承类 override func viewDidLoad() { super.viewDidLoad() // 可以加个背景色测试,确认视图正常显示 view.backgroundColor = .white } override func didReceiveMemoryWarning() { super.didReceiveMemoryWarning() // 释放可重建的资源 } }
2. 如果你确实需要这个是导航控制器
那必须给它设置一个根视图控制器,比如在viewDidLoad里添加:
import UIKit class ViewController: UINavigationController { override func viewDidLoad() { super.viewDidLoad() // 创建一个根VC,并设置背景色 let rootViewController = UIViewController() rootViewController.view.backgroundColor = .white // 将根VC加入导航栈 setViewControllers([rootViewController], animated: false) } override func didReceiveMemoryWarning() { super.didReceiveMemoryWarning() // 释放可重建的资源 } }
另外,也可以在SceneDelegate(或者旧项目的AppDelegate)里设置窗口根控制器时,直接给这个导航控制器绑定根VC,效果是一样的。
额外小提示
以后遇到类似黑屏问题,可以先给视图加个显眼的背景色(比如红色),这样能快速判断是视图没加载,还是内容为空~ 重置模拟器没用是因为这是代码逻辑问题,不是模拟器缓存的锅哦!
内容的提问来源于stack exchange,提问作者Ahtazaz
相关产品推荐
相关产品推荐

