#ios #swiftui #uikit
#iOS #swiftui #uikit
Вопрос:
у какого UIKit есть предварительный просмотр в реальном времени в xcode? как и у SwiftUI, у xcode есть прямой доступ к xcode. при написании кода с помощью SwiftUI вы можете отображать дизайн результата в левом xcode
Ответ №1:
Вы можете попробовать этот код, импортировав SwiftUI. Вы можете создать новый файл или поместить его под своим кодом ViewController.
struct MainViewController_Previews: PreviewProvider {
static var previews: some View {
return ContentView()
}
struct ContentView: UIViewControllerRepresentable {
func makeUIViewController(context: Context) -> MainViewController {
return MainViewController()
}
func updateUIViewController(_ uiViewController: MainViewController, context: Context) {
//
}
}
}
Если вы хотите игнорировать SafeArea, просто добавьте contentView().edgesIgnoringSafeArea(.all) и для определенного типа устройства вы можете использовать .previewDevice(.init(StringLiteral: «DEVICE_TYPE»)) // iPhone 11 Pro
Комментарии:
1. нужно ли импортировать SwiftUI?
2. Замените MainViewController на ваше имя ViewController. Да, сначала вам нужно импортировать SwiftUI, потому что протокол PreviewProvider недоступен в UIKit.
Ответ №2:
Чтобы ваши ViewControllers работали с предварительными просмотрами Xcode
1 — Сделайте их представимыми, соответствуя протоколу UIViewControllerRepesentable.
struct YourVCRepresentable: UIViewControllerRepresentable {
func updateUIViewController(_ uiViewController: UIViewController, context: Context) {
// leave this empty
}
func makeUIViewController(context: Context) -> UIViewController {
YourViewController() // this is to make your view controller representable
}
}
2 — Создайте структуру поставщика предварительного просмотра, соответствующую протоколу PreviewProvider, и передайте созданный выше RepresentableViewController.
struct YourVCPreview: PreviewProvider {
static var previews: some View {
YourVCRepresentable()
}
}
Ответ №3:
a. Создать расширение
import SwiftUI
extension UIViewController {
private struct Preview: UIViewControllerRepresentable {
let viewController: UIViewController
func makeUIViewController (context: Context) -> some UIViewController {
viewController
}
func updateUIViewController(_ uiViewController: UIViewControllerType, context: Context) {
}
}
func showPreview() -> some View {
Preview(viewController: self).edgesIgnoringSafeArea(.all)
}
}
б. Добавьте в свой класс MyViewController
import SwiftUI
struct ViewControllerProvider: PreviewProvider {
static var previews: some View {
MyViewController().showPreview()
}
}