SwiftUI的声明式布局是真的炫酷
。不过真正运用到项目中还需要点时间。
不过我们可以通过SwiftUI中提供的UIViewControllerRepresentable
协议 让你的UIKit中的VC显示在XCode11的Preview中, 如下图。
ok 我们直接开始说说如何实现(共三步):
-
1、我们先暂定我们的UIKit的VC叫
UIKitViewController
,先做一点最简单的UI布局
-
2. 创建一个中转结构体UIVCPresenter 遵循并实现UIViewControllerRepresentable 协议 这个结构体可以当做UIKit和SwiftUI的一个桥接。
-
3. 最后就是最基本的SwiftUI 中的View的Preview显示方法。创建一个基本的SwiftUI工程就会有这段示例代码
下面就是愉快的按下Option
+ Command
+ P
的(刷新Preview)快捷键。
我们就可以在XCode11的Preview中显示我们的UIViewController啦~
最后副一下我的示例代码
(差不多30行左右的亚子):
import SwiftUI
class UIKitViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
self.view.backgroundColor = .red
let blueView = UIView(frame: CGRect(x: 100, y: 100, width: 100, height: 100))
blueView.backgroundColor = .green
view.addSubview(blueView)
}
}
struct UIVCPresenter: UIViewControllerRepresentable {
///UIViewControllerRepresentable 协议中必须实现的方法 - 当 SwiftUI 准备好显示 view 时,它会调用此方法一次
///作用: 将需要Preview显示VC 返回出来。
func makeUIViewController(context: UIViewControllerRepresentableContext) -> UIKitViewController {
return UIKitViewController()
}
///UIViewControllerRepresentable 协议中必须实现的方法
/// 更新UIViewController时候会调用这个方法 可以做一系列l业务实现,
func updateUIViewController(_ uiViewController: UIKitViewController, context: UIViewControllerRepresentableContext) {
}
}
struct swiftUIView: View {
var body: some View {
UIVCPresenter()
}
}
struct UIKitVCPreView : PreviewProvider {
static var previews: some View {
swiftUIView()
}
}