¿Cuatro formas de previsualizar documentos en SwiftUI y no conoces cuál usar? Aquí está la guía definitiva
Arturo Rivas Arias
📄 Trabajar con documentos es fundamental en muchas apps iOS: PDFs, imágenes, documentos Office… Pero no todos los frameworks ofrecen lo mismo. Algunos priorizan simplicidad, otros control total, y cada uno tiene su lugar según tus necesidades.
🚀 Quick Look es tu primera opción cuando necesitas rapidez y cero configuración. Con una sola línea de código obtienes un visor nativo del sistema que soporta decenas de formatos diferentes sin esfuerzo adicional.
@State var url: URL?
Button("Previsualizar") {
url = Bundle.main.url(forResource: "documento", withExtension: "pdf")
}
.quickLookPreview($url)
📚 PDFKit es la solución cuando necesitas control total sobre PDFs: navegación entre páginas, zoom personalizado, modos de visualización, selección de texto y anotaciones. Perfecto para apps que trabajan intensivamente con PDFs.
struct PDFKitView: UIViewRepresentable {
let url: URL
func makeUIView(context: Context) -> PDFView {
let pdfView = PDFView()
pdfView.autoScales = true
pdfView.displayMode = .singlePageContinuous
pdfView.document = PDFDocument(url: url)
return pdfView
}
func updateUIView(_ pdfView: PDFView, context: Context) {}
}
🌐 WKWebView ofrece flexibilidad para mostrar documentos dentro de tu interfaz sin lanzar pantallas modales. iOS renderiza PDFs automáticamente usando su motor interno, aunque con menos funcionalidades que PDFKit.
struct WebKitView: UIViewRepresentable {
let url: URL
func makeUIView(context: Context) -> WKWebView {
let webView = WKWebView()
webView.load(URLRequest(url: url))
return webView
}
func updateUIView(_ uiView: WKWebView, context: Context) {}
}
💡 Desde iOS 26 existe WebView nativo de SwiftUI, así que puedes crear un componente con retrocompatibilidad que use la versión moderna en sistemas nuevos y el wrapper UIKit en versiones anteriores.
🔄 UIDocumentInteractionController es la opción más veterana pero única en su tipo: además de previsualizar, expone acciones del sistema como enviar el archivo a otras apps o imprimirlo directamente.
struct DocumentInteractionView: UIViewControllerRepresentable {
@Binding var isPresented: Bool
let docController: UIDocumentInteractionController
init(_ isPresented: Binding<Bool>, url: URL) {
self._isPresented = isPresented
self.docController = UIDocumentInteractionController(url: url)
}
func makeUIViewController(context: Context) -> UIViewController {
UIViewController()
}
func updateUIViewController(_ uiViewController: UIViewController, context: Context) {
guard isPresented, docController.delegate == nil else { return }
docController.delegate = context.coordinator
docController.presentPreview(animated: true)
}
}
⚖️ La decisión depende de tu caso de uso: Quick Look para simplicidad máxima, PDFKit para experiencias PDF ricas, WKWebView para integración ligera en tu UI, y UIDocumentInteractionController cuando necesitas las acciones extendidas del sistema.
🎯 Lo interesante es que puedes combinar todos estos enfoques en una misma app: Quick Look para vistas rápidas, PDFKit para lectura profunda y WKWebView para previews embebidas. Cada herramienta complementa a las demás.
🔧 Además, tanto PDFKit como WKWebView te permiten trabajar con objetos Data en lugar de URLs, lo que resulta perfecto cuando generas documentos dinámicamente o los descargas de una API sin guardarlos en disco.
👨💻 Conocer estas cuatro opciones y cuándo aplicar cada una transforma cómo gestionas documentos en tus apps. No existe una solución universal, pero sí la herramienta correcta para cada contexto. ¿Cuál usas más en tus proyectos?