Swift Pills

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

Deslizar desde cualquier punto de la pantalla para volver atrás en UIKit: una experiencia nativa mejorada

🎯 El gesto de deslizar desde el borde izquierdo para retroceder es uno de los patrones de navegación más intuitivos de iOS. Sin embargo, por defecto en UIKit, este gesto solo funciona desde un área muy estrecha del borde izquierdo de la pantalla.

📏 Apple limita el área táctil del gesto de retroceso a aproximadamente 44 puntos desde el borde izquierdo. Esta restricción puede resultar frustrante para los usuarios, especialmente en dispositivos más grandes donde alcanzar el borde puede ser incómodo.

🔧 La solución pasa por extender el UIGestureRecognizerDelegate del UINavigationController. Específicamente, podemos implementar el método gestureRecognizerShouldBegin para ampliar el área de reconocimiento del gesto de retroceso a toda la pantalla.

class CustomNavigationController: UINavigationController {
    override func viewDidLoad() {
        super.viewDidLoad()
        interactivePopGestureRecognizer?.delegate = self
    }
}

extension CustomNavigationController: UIGestureRecognizerDelegate {
    func gestureRecognizerShouldBegin(_ gestureRecognizer: UIGestureRecognizer) -> Bool {
        return viewControllers.count > 1
    }
}

💡 Para lograrlo, necesitamos crear una subclase de UINavigationController o una extensión que actúe como delegado del recognizer. El truco está en verificar que el gesto sea el interactivePopGestureRecognizer y que haya más de un view controller en la pila de navegación.

⚠️ Es crucial mantener la verificación de que viewControllers.count > 1 para evitar que el usuario pueda hacer pop del root view controller o contrador base, lo que causaría un comportamiento inesperado o incluso un crash de la aplicación.

🎨 Una implementación elegante implica configurar el delegado en viewDidLoad y devolver true en el método del delegado solo cuando sea seguro permitir el gesto. Esto mantiene toda la funcionalidad nativa mientras expande el área interactiva.

🚀 Esta mejora no solo hace la navegación más cómoda, sino que también se alinea con las expectativas modernas de los usuarios de iOS, quienes esperan poder iniciar gestos desde cualquier punto de la pantalla en muchas apps populares.

👨‍💻 Implementar gestos de navegación fluidos puede marcar una gran diferencia en la experiencia de usuario de tu app. ¿Ya has extendido el área del gesto de retroceso en tus proyectos UIKit?

Posted in

Deja un comentario