Swift Pills

Dosis rápidas de conocimiento sobre Swift y desarrollo en ecosistemas Apple

¿Cuatro formas de previsualizar documentos en SwiftUI y no conoces cuál usar? Aquí está la guía definitiva

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

Posted in

Deja un comentario