es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Bloquear la orientación del dispositivo en SwiftUI UIViewControllerRepresentable.

Tengo un UIViewController que necesito envolver y usar como una vista de SwiftUI. He implementado los métodos necesarios para bloquear la orientación del dispositivo para ese controlador de vista. Cuando uso el UIViewController en un contexto UIKit, la orientación se puede bloquear.

class ContentViewController : UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()
        self.view.backgroundColor = UIColor.red
    }

    override var supportedInterfaceOrientations: UIInterfaceOrientationMask {
        return .portrait
    }

    override var preferredInterfaceOrientationForPresentation: UIInterfaceOrientation {
        return .portrait
    }

    override var shouldAutorotate: Bool {
        return false
    }
}

Cuando lo envuelvo como una vista de SwiftUI con UIViewControllerRepresentable, la orientación no se puede bloquear.

struct ContentWrappedView : UIViewControllerRepresentable {

    func makeUIViewController(context: Context) -> ContentViewController {
        return ContentViewController.init()
    }

    func updateUIViewController(_ uiViewController: ContentViewController, context: Context) {
    }
}

¿Es este el comportamiento esperado? ¿Hay alguna manera de solucionarlo? Lo usaré en un marco de trabajo y, por lo tanto, implementarlo con AppDelegate no me funciona. Gracias de antemano.

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Sí, este es el comportamiento esperado porque cuando envuelves un UIViewController dentro de una vista SwiftUI usando UIViewControllerRepresentable, el UIViewController ya no es una parte directa de la jerarquía de UIKit y en su lugar es gestionado por SwiftUI. Por lo tanto, el bloqueo de orientación implementado en el UIViewController no funciona como se espera cuando se usa en un contexto de SwiftUI.

    Para solucionar esto, puedes intentar usar el objeto de entorno para establecer las preferencias de orientación desde una vista de nivel superior, como la vista padre de ContentWrappedView. Alternativamente, puedes intentar implementar el bloqueo de orientación utilizando las API nativas de SwiftUI, como NavigationView y TabView, que proporcionan soporte incorporado para controlar la orientación del dispositivo.

Comments are closed.