如何将Xcode新建项目从SwiftUI切换为Storyboard?
当然可以改用Storyboard开发,具体操作步骤如下:
添加Storyboard文件
右键项目导航区空白处,选择「New File...」,在iOS分类下找到「User Interface」里的「Storyboard」,命名为Main(保持默认命名更符合iOS开发习惯),点击「Create」完成创建。配置启动界面为Storyboard
选中项目根节点(蓝色的项目图标),切换到右侧的「Info」标签栏:- 找到「Custom iOS Target Properties」,如果存在「Main storyboard file base name」项就删除它,然后添加新的键值对:键填
UIMainStoryboardFile,值填你刚才命名的Storyboard名称(比如Main)。 - 找到「Application Scene Manifest」字典,删除「Scene Configuration -> Application Session Role -> Item 0 -> Storyboard Name」项;如果不需要多场景支持,也可以直接删除整个「Application Scene Manifest」字典。
- 找到「Custom iOS Target Properties」,如果存在「Main storyboard file base name」项就删除它,然后添加新的键值对:键填
调整入口代码(SceneDelegate/AppDelegate)
如果项目是iOS 13+的SceneDelegate结构:
打开SceneDelegate.swift,找到scene(_:willConnectTo:options:)方法,替换原有SwiftUI代码为:guard let windowScene = (scene as? UIWindowScene) else { return } let window = UIWindow(windowScene: windowScene) window.rootViewController = UIStoryboard(name: "Main", bundle: nil).instantiateInitialViewController() self.window = window window.makeKeyAndVisible()如果想改用AppDelegate为主(或适配iOS 12及以下):
删除SceneDelegate.swift,然后在AppDelegate.swift中添加以下代码:var window: UIWindow? func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool { window = UIWindow(frame: UIScreen.main.bounds) window?.rootViewController = UIStoryboard(name: "Main", bundle: nil).instantiateInitialViewController() window?.makeKeyAndVisible() return true }设置Storyboard初始控制器
打开新建的Main.storyboard,拖拽一个ViewController到画布上,选中该控制器,点击右侧「Attributes Inspector」(第四个图标),勾选「Is Initial View Controller」,确保App启动时会加载这个控制器。清理SwiftUI冗余文件(可选)
删除默认生成的ContentView.swift和[你的项目名]App.swift,这些是SwiftUI的入口文件,改用Storyboard后不再需要。
内容的提问来源于stack exchange,提问作者Chris Hansen

