Предварительный просмотр UIKit в реальном времени, как SwiftUI

#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()
    }
}