是否可以使用现有的UIKit应用程序并排使用SwiftUI构建视图?

我有一个用Objective-C编写的现有应用程序.我已经开始迁移到Swift 5.我想知道我是否可以在使用现有UIKit的同时使用SwiftUI.xib观点.

也就是说,我希望在同一个应用程序中使用SwiftUI构建一些视图,使用UIKit构建一些其他视图.当然不能把两者混为一谈.

SomeObjCSwiftProject/
    SwiftUIViewController.swift
    SwiftUIView.xib
    UIKitViewController.swift
    UIKitView.xib

一起工作

推荐答案

edit 05/06/19: Added information about UIHostingController as suggested by @Departamento B in his answer. Credits go to him!


在UIKit中使用SwiftUI

通过将SwiftUI View包装成UIHostingController,可以在现有UIKit环境中使用SwiftUI个组件,如下所示:

let swiftUIView = SomeSwiftUIView() // swiftUIView is View
let viewCtrl = UIHostingController(rootView: swiftUIView)

它也可以覆盖UIHostingController,并根据需要定制,例如,如果preferredStatusBarStyle不能按预期通过SwiftUI工作,则手动设置preferredStatusBarStyle.

UIHostingControllerhere.


在SwiftUI中使用UIKit

如果现有的UIKit视图应该在SwiftUI环境中使用,那么UIViewRepresentable协议就是有帮助的!这篇教程可以在Apple this中看到,也可以在Apple here中看到.


Compatibility

请注意,您不能在iOS版本上使用SwiftUI<;iOS 13,as SwiftUI仅在iOS 13及以上版本上可用.更多信息请参见this篇帖子.

如果你想在目标低于iOS 13的项目中使用SwiftUI,你需要用@available(iOS 13.0.0, *)属性标记你的SwiftUI struct .

Swift相关问答推荐

SwiftData:线程1:&Quot;NSFetchRequest找不到实体名称';提醒&q;的NSEntityDescription

SwiftUI:为什么@State在子视图中持续存在?

仅使用@MainActor注释类的部分时的并发问题

插入/删除视图时的Swiftui动态过渡

在Xcode SWIFT中运行用Ionic编写的函数

文件命名&NumberForMatter+扩展名&:含义?

SwiftData:非法try 在不同上下文中的对象之间建立关系

如何使用Swift宏和@Observable和@Environment?

为什么我的Swift app不能用xcodebuild构建,但是用XCode可以构建?

Swift-SceneKit-无法从art.scnassets加载.scn文件

如何在不提交到应用store 的情况下在本地运行我的应用

Swiftui 按钮依次显示一组图像

为什么 performSegue() 不调用 shouldPerformSegue()

创建 ViewModel 时 iOS 模拟器上的黑屏

在 Swift 中将计时器标签格式化为小时:分钟:秒

UITableViewAlertForLayoutOutsideViewHierarchy 错误:仅警告一次(iOS 13 GM)

两个 Date 对象之间的所有日期 (Swift)

在 Swiftui 中是否有一种简单的方法可以通过捏合来放大图像?

swift 中的@property/@synthesize 类似功能

如何快速将弹出框调整为表格视图中内容的大小?