Tocropviewcontroller: Descartar problemas de transición (iOS 13)

Creado en 8 ago. 2019  ·  23Comentarios  ·  Fuente: TimOliver/TOCropViewController

Encontré un problema al presentar el controlador de cultivo sobre un controlador de navegación.

Al cerrar el controlador de recorte, al final de la transición, la vista del controlador de navegación se elimina y no se muestra ... (ocurre en iPhone y iPad y solo en iOS 13).

sin mencionar que la navegación sigue ahí y la interfaz de usuario está "atascada".

bug

Comentario más útil

 func cropViewController(_ cropViewController: CropViewController, didFinishCancelled cancelled: Bool) {
        //This code fails on iOS13.
        //cropViewController.dismiss(animated: true)

        let viewController = cropViewController.children.first!
        viewController.modalTransitionStyle = .coverVertical
        viewController.presentingViewController?.dismiss(animated: true, completion: nil)
    }

Este método funciona bien en iOS 13.
No sé por qué.

Espero que encuentres una mejor manera.

https://www.dropbox.com/s/wyzc8errinfap1f/TestCrop.zip?dl=0

Todos 23 comentarios

@uchiaTziki Um. Puede que tengas que mostrármelo, ¡lo siento! ¿Puedes adjuntar una captura de pantalla?

capturas de pantalla adjuntas ...

  1. presentando modal con selector de imágenes.
  2. imagen elegida
  3. actual controlador de cultivo de esa celda
  4. después de cancelar, el descarte hace que el selector de imágenes desaparezca (y está viendo el controlador de presentación inicial: coloreé el controlador en blanco)

Espero que aclare las cosas ...
1
2
3
4

Hmm, ¿entonces lo estás presentando dentro de otro controlador de vista que se presenta?

Me pregunto si este código de descarte termina descartando el controlador de vista incorrecto, entonces:

https://github.com/TimOliver/TOCropViewController/blob/8770be8407540f5873fe714870771cea8a382ac7/Objective-C/TOCropViewController/TOCropViewController.m#L895

¿Puede intentar cambiar el código allí y ver si puede encontrar una combinación que lo solucione?

Sin poder probarlo yo mismo, no hay nada que pueda hacer por mi parte. ¡Perdón!

Intenté casi cualquier cosa, pero volveré a intentarlo ...
El controlador en la parte posterior no se descarta ... se está eliminando la vista (lo cual es extraño).

¿Probó estos códigos antes de presentar cropViewController?

if #available(iOS 13.0, *) {
 cropViewController.modalPresentationStyle = .fullScreen
}

Lo probé esta mañana. Soluciona el error, pero la animación es la animación modal predeterminada (de abajo hacia arriba).
La animación especial de la vista / marco no funciona con esta solución

@uchiaTziki , ¿encontraste alguna solución?

¿Es esto reproducible en la aplicación de muestra? Si es así, potencialmente puedo echarle un vistazo.

La forma en que funcionan las presentaciones modales en iOS 13 cambió con respecto a las versiones anteriores de iOS. Pero todavía no he tenido una buena oportunidad de averiguar exactamente qué necesitamos hacer para actualizar el código para eso.

Por lo que puedo ver, no funciona correctamente cuando tienes lo siguiente:

  • El controlador de navegación (A) empuja un controlador de vista (B)
  • El controlador de vista (B) presenta el controlador de vista (C) como hoja de formulario
  • View Controller (C) presenta CropViewController
  • Toque Cancelar o Listo en CropViewController y podrá detectar el error.

Lo siento, estaba de vacaciones.

¿Probó estos códigos antes de presentar cropViewController?

if #available(iOS 13.0, *) {
 cropViewController.modalPresentationStyle = .fullScreen
}

Usar eso ( @TimOliver ) en la última versión beta de Xcode funcionó. Entonces, la animación de transición me está funcionando ahora.

Esto funcionó para mí también.

 func cropViewController(_ cropViewController: CropViewController, didFinishCancelled cancelled: Bool) {
        //This code fails on iOS13.
        //cropViewController.dismiss(animated: true)

        let viewController = cropViewController.children.first!
        viewController.modalTransitionStyle = .coverVertical
        viewController.presentingViewController?.dismiss(animated: true, completion: nil)
    }

Este método funciona bien en iOS 13.
No sé por qué.

Espero que encuentres una mejor manera.

https://www.dropbox.com/s/wyzc8errinfap1f/TestCrop.zip?dl=0

Hola, me encontré con el error en iOS 13.1

si uso
dismiss(animated: true, completion: nil)
en iOS 13.1,

Todos los ViewController desaparecen.

crop

No sé por qué.

Solo tuve que configurar cropViewController.modalTransitionStyle = .coverVertical como una solución, ya que entonces ya no usa la transición personalizada ...

Lo mismo que @oblq aquí.

¿Probó estos códigos antes de presentar cropViewController?

if #available(iOS 13.0, *) {
 cropViewController.modalPresentationStyle = .fullScreen
}

Solucionado mi problema, gracias

si #disponible (iOS 13.0, *) {
cropViewController.modalPresentationStyle = .fullScreen
}

Gracias. Esto solucionó mi problema en iOS 13

después de recortar la imagen, descartando el controlador de recorte, al final de la transición, la vista del controlador de navegación se elimina y no se muestra

Por favor, ayúdame

después de recortar la imagen, descartando el controlador de recorte, al final de la transición, la vista del controlador de navegación se elimina y no se muestra

Por favor, ayúdame

¡Hola! Simplemente configure cropViewController.dismiss(animated: **false**, completion: nil) lugar de cropViewController.dismiss(animated: **true**, completion: nil)

También he intentado solucionar este problema. Como dice @ ibdman1991 , la desactivación de la animación funciona, pero se ve mal. Creo que eliminar el transitioningDelegate podría ser una mejor solución, aunque no estoy seguro de cuán impactante sería esto.

    let cropViewController = CropViewController(image: image)
    cropViewController.modalTransitionStyle = .crossDissolve
    cropViewController.transitioningDelegate = nil

si #disponible (iOS 13.0, *) {
cropViewController.modalPresentationStyle = .fullScreen
}

Este problema se resuelve en iOS 13 y superior Gracias

si #disponible (iOS 13.0, *) {
cropViewController.modalPresentationStyle = .fullScreen
// cropViewController.modalTransitionStyle = .crossDissolve
cropViewController.transitioningDelegate = nulo
}
Trabajando para mi

Uhh. Bueno. Dado que establecer explícitamente el estilo de presentación en pantalla completa parecía solucionarlo para la mayoría de las personas, voy a cerrar esto. :)

Si tiene un caso de uso específico que requiere un estilo de presentación modal explícitamente diferente, abra un nuevo problema y explique con mucho cuidado lo que está tratando de hacer. Tenga en cuenta que si se trata de un error en iOS 13, es posible que no podamos hacer mucho aquí.

¡Gracias!

¿Fue útil esta página
0 / 5 - 0 calificaciones

Temas relacionados

rnkyr picture rnkyr  ·  4Comentarios

asadqazi picture asadqazi  ·  3Comentarios

mugunth87 picture mugunth87  ·  5Comentarios

muranobu picture muranobu  ·  4Comentarios

trr-amsiq picture trr-amsiq  ·  10Comentarios