Tocropviewcontroller: ¿SafeAreaInsets es incorrecto?

Creado en 25 sept. 2019  ·  14Comentarios  ·  Fuente: TimOliver/TOCropViewController

¡Gracias por la increíble biblioteca! 👍

¿Qué estás tratando de lograr exactamente con esta biblioteca?
Solo tengo una pregunta. La posición de la barra de herramientas demasiado cerca de la parte inferior:

¿Tiene un safeAreaInsets.bottom incorrecto?

¿Necesita un proyecto de ejemplo reproducible? TestSafeArea.zip

bug rfc

Comentario más útil

¡Hola @ zhangao0086! ¡Pido disculpas por la demora!

Finalmente tuve algo de tiempo libre para examinar lo que estaba pasando. Era extraño porque incluso en el nivel del contenedor principal, los safeAreaInsets eran 0 excepto por la muesca.

Aunque creo que lo arreglé. Este fue otro efecto secundario de la nueva pantalla modal de iOS 13. Resulta que si no configura modalPresentationStyle en .fullScreen , el controlador de vista no parece obedecer las inserciones.

Todavía no he enviado una nueva versión de pod (mi servidor CI se cayó cuando lo actualicé a Catalina. 😅), pero agregué la bandera .fullScreen a la rama maestra. ¿Puedes intentar sacar del maestro y ver si funciona para ti ahora?

La sintaxis para extraer del maestro a través de CocoaPods es:

pod 'CropViewController', :git => 'https://github.com/TimOliver/TOCropViewController.git'

¡Gracias!

Todos 14 comentarios

@ zhangao0086 mismo problema aquí en iOS13, también cuando presiona Cancelar, la aplicación se bloquea ... ¿alguna actualización sobre esto?

silbido...

¡Hola!
La razón está en una transición de VC personalizada de CropViewController. Para solucionar este problema, tenemos que investigar un poco las diferencias en iOS13 relacionadas con la transición o ... simplemente deshabilitarlo :)
archivo: CropViewController.swift, cadena: 561.

fileprivate func setUpCropController() {
        addChild(toCropViewController)
        transitioningDelegate = (toCropViewController as! UIViewControllerTransitioningDelegate)
        toCropViewController.delegate = self
        toCropViewController.didMove(toParent: self)
    }

Para usar use una transición predeterminada, podemos comentar / eliminar esta línea:

transitioningDelegate = (toCropViewController as! UIViewControllerTransitioningDelegate)

No creo que este problema sea solo una cuestión de transición personalizada. Presento el controlador empujándolo desde un UIImagePickerController en un popover. El popover en iOS 13 incluye la flecha en la vista, por lo que este controlador ahora piensa que es más grande de lo que es y ocupa el espacio adicional para la flecha. Entonces, si la flecha está en el lado derecho, el contenido de este controlador se escapa de la pantalla en el lado derecho, etc. Algo debe modificarse con un área segura, pero no estoy seguro de qué solucionaría esto, especialmente porque todo se hace mediante programación. y hay varios puntos de vista involucrados.

Creo que safeAreaLayoutGuide debe usarse de alguna manera, en algún lugar, para solucionar este problema. Acabo de revisar el código y no parece que esté incluido en ninguna parte. Ojalá pudiera ser de más ayuda. Aquí hay un par de lugares más donde las personas tienen este problema, que también incluyen algunas formas en que posiblemente se pueda abordar:

https://stackoverflow.com/questions/57988889/ios-13-uipopoverpresentationcontroller-sourceview-content-visible-in-the-arrow

https://stackoverflow.com/questions/57866771/ios-problem-of-display-the-popover-border-in-the-ios13

Además, si esto se ha solucionado en el código actual, es posible que no lo vea porque estoy usando Carthage, aunque lo acabo de verificar y no hay actualizaciones.

¿Algún avance en esto? @TimOliver

Hola @ zhangao0086. ¡Muchas gracias por la aplicación de muestra completa!

Ahora estoy ocupado apagando incendios de iOS 13 en algunos de mis otros proyectos, así que todavía no he tenido la oportunidad de ver esto. ¡Perdón!

Lo investigaré cuando pueda. Mientras tanto, si alguien encuentra la solución y puede enviar un PR, ¡sería muy apreciado!

Originalmente hice CropViewController un controlador de vista separado ya que no era posible convertir toda la interfaz Objective-C de TOCropViewController a Swift en ese momento. Pero creo que la interoperabilidad ha mejorado hasta el punto en que ahora podemos deshacernos de la envoltura. Con suerte, eso evitará problemas como este en el futuro.

@TimOliver ¡ Gracias por tu respuesta! Te entiendo totalmente😃

¡Hola @ zhangao0086! ¡Pido disculpas por la demora!

Finalmente tuve algo de tiempo libre para examinar lo que estaba pasando. Era extraño porque incluso en el nivel del contenedor principal, los safeAreaInsets eran 0 excepto por la muesca.

Aunque creo que lo arreglé. Este fue otro efecto secundario de la nueva pantalla modal de iOS 13. Resulta que si no configura modalPresentationStyle en .fullScreen , el controlador de vista no parece obedecer las inserciones.

Todavía no he enviado una nueva versión de pod (mi servidor CI se cayó cuando lo actualicé a Catalina. 😅), pero agregué la bandera .fullScreen a la rama maestra. ¿Puedes intentar sacar del maestro y ver si funciona para ti ahora?

La sintaxis para extraer del maestro a través de CocoaPods es:

pod 'CropViewController', :git => 'https://github.com/TimOliver/TOCropViewController.git'

¡Gracias!

@TimOliver ¡ Muchas gracias por tu gran trabajo!

¡Maravilloso! ¡Está funcionando exactamente como esperaba! 👍

También tuve que configurar cropViewController.modalPresentationStyle = .fullScreen en mi código (no solo actualizar a la rama maestra). Agregar una nota aquí, ya que no estaba claro para mí

Esta corrección parece funcionar solo para el código Swift. ¿Alguien sabe por qué no funciona en el objetivo C?

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