Posts

¿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?