Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save VadimYakovliev/ab025c4ff7945d07d71bd2b9e4f0e664 to your computer and use it in GitHub Desktop.
Save VadimYakovliev/ab025c4ff7945d07d71bd2b9e4f0e664 to your computer and use it in GitHub Desktop.
Generic structures to host previews of UIView and UIViewController subclasses.
#if canImport(SwiftUI) && DEBUG
import SwiftUI
let deviceNames: [String] = [
"iPhone SE",
"iPad 11 Pro Max",
"iPad Pro (11-inch)"
]
@available(iOS 13.0, *)
struct ViewController_Preview: PreviewProvider {
static var previews: some View {
ForEach(deviceNames, id: \.self) { deviceName in
UIViewControllerPreview {
UIStoryboard(name: "Main", bundle: nil)
.instantiateInitialViewController { coder in
ViewController(coder: coder)
}!
}.previewDevice(PreviewDevice(rawValue: deviceName))
.previewDisplayName(deviceName)
}
}
}
#endif
Group {
UIViewPreview {
let button = FavoriteButton(frame: .zero)
return button
}
UIViewPreview {
let button = FavoriteButton(frame: .zero)
button.isFavorited = true
return button
}
}.previewLayout(.sizeThatFits)
.padding(10)
import UIKit
#if canImport(SwiftUI) && DEBUG
import SwiftUI
@available(iOS 13.0, *)
struct UIViewControllerPreview<ViewController: UIViewController>: UIViewControllerRepresentable {
let viewController: ViewController
init(_ builder: @escaping () -> ViewController) {
viewController = builder()
}
// MARK: - UIViewControllerRepresentable
func makeUIViewController(context: Context) -> ViewController {
viewController
}
func updateUIViewController(_ uiViewController: ViewController, context: UIViewControllerRepresentableContext<UIViewControllerPreview<ViewController>>) {
return
}
}
#endif
import UIKit
#if canImport(SwiftUI) && DEBUG
import SwiftUI
@available(iOS 13.0, *)
struct UIViewPreview<View: UIView>: UIViewRepresentable {
let view: View
init(_ builder: @escaping () -> View) {
view = builder()
}
// MARK: - UIViewRepresentable
func makeUIView(context: Context) -> UIView {
return view
}
func updateUIView(_ view: UIView, context: Context) {
view.setContentHuggingPriority(.defaultHigh, for: .horizontal)
view.setContentHuggingPriority(.defaultHigh, for: .vertical)
}
}
#endif
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment