En iOS 13 hay un nuevo comportamiento para el controlador de vista modal cuando se presenta.
Ahora no es pantalla completa por defecto y cuando trato de deslizarme hacia abajo, la aplicación simplemente cierra el controlador de vista automáticamente.
¿Cómo puedo evitar este comportamiento y volver al antiguo modo de pantalla completa vc?
Gracias
ios
viewcontroller
modalviewcontroller
ios13
pascalbros
fuente
fuente
fullScreen
opción debe ser predeterminada para evitar que se rompan los cambios de la interfaz de usuario.isModalInPresentation
para bloquear el gesto de deslizamiento para que no se descarte. Vea mi publicación de blog para más detalles: medium.com/@hacknicity/….automatic
estilo se ha establecido como el predeterminado, que es (para la mayoría de los controladores de vista).pageSheet
estilo. Sin embargo, algunos controladores de vista del sistema pueden asignarlo a un estilo diferente.Agrego una información que podría ser útil para alguien. Si tiene algún guión gráfico, para volver al estilo anterior, debe establecer la propiedad kind en Present Modally y la propiedad Presentation en Pantalla completa .
fuente
performSegue
. ¡Gracias querido!Tuve este problema en la vista inicial justo después de la pantalla de inicio. La solución para mí ya que no tenía una segue o lógica definida fue cambiar la presentación de automático a pantalla completa como se muestra aquí:
fuente
Hay varias formas de hacerlo, y creo que cada una podría encajar en un proyecto, pero no en otro, así que pensé que las mantendría aquí, tal vez alguien más se encargaría de un caso diferente.
1- Anular presente
Si tiene un
BaseViewController
puede anular elpresent(_ viewControllerToPresent: animated flag: completion:)
método.De esta manera, no necesita hacer ningún cambio en ninguna
present
llamada, ya que simplemente anulamos elpresent
método.2- Una extensión:
Uso:
3- Para un controlador UIView
4- del guión gráfico
Seleccione una secuencia y establezca la presentación en
FullScreen
.5- Swizzling
Uso:
En su
AppDelegate
interiorapplication(_ application: didFinishLaunchingWithOptions)
agregue esta línea:De esta manera, no necesita hacer ningún cambio en ninguna llamada actual, ya que estamos reemplazando la implementación del método actual en tiempo de ejecución.
Si necesita saber qué es swizzling, puede consultar este enlace: https://nshipster.com/swift-objc-runtime/
fuente
Solía swizzling para ios 13
entonces pon esto
algun lado
por ejemplo en AppDelegate
fuente
static let
es perezoso, tienes que leerlo para que se calcule, var perezoso se calculó solo una vez, lo uso para garantizar que ese swizzling llame una vezPara usuarios de Objective-C
Solo usa este código
O si desea agregarlo en particular en iOS 13.0, use
fuente
Un trazador de líneas:
modalPresentationStyle
se requiere que se configure en el NavigationController que se presenta .Código probado
modalPresentationStyle requiere establecer en navigationController .
fuente
Como una pista: Si llama a un presente
ViewController
que está incrustado dentro de unaNavigationController
que tiene que establecer laNavigationController
a.fullScreen
y no el VC.Puede hacer esto como @davidbates o hacerlo programáticamente (como @pascalbros).
Un escenario de ejemplo:
fuente
Necesitaba hacer las dos cosas:
Establecer el estilo de presentación como pantalla completa
Establecer la barra superior como barra de navegación translúcida
fuente
Cambiar
modalPresentationStyle
antes de presentarfuente
Aquí hay una solución fácil sin codificar una sola línea.
Este cambio hace que el funcionamiento de la aplicación iPad sea el esperado, de lo contrario, la nueva pantalla se muestra en el centro de la pantalla como una ventana emergente.
fuente
Si tiene un UITabController con pantallas con controladores de navegación incorporados, debe configurar la presentación de UITabController en FullScreen como se muestra en la imagen a continuación
fuente
Aquí está la solución para Objective-C
fuente
Lo último para iOS 13 y Swift 5.x
fuente
Aquí está mi versión de corrección en ObjectiveC usando Categorías. Con este enfoque, tendrá el comportamiento predeterminado UIModalPresentationStyleFullScreen hasta que se establezca explícitamente otro.
fuente
Todas las otras respuestas son suficientes, pero para un proyecto grande como el nuestro y donde se realizan navegaciones tanto en código como en storyboard, es una tarea bastante desalentadora.
Para aquellos que usan Storyboard activamente. Este es mi consejo: use Regex.
El siguiente formato no es bueno para páginas de pantalla completa:
El siguiente formato es bueno para páginas de pantalla completa:
La siguiente expresión regular compatible con VS CODE convertirá todas las páginas de estilo antiguo a nuevas páginas de estilo. Es posible que deba escapar de caracteres especiales si está utilizando otros motores de expresiones regulares / editores de texto.
Búsqueda Regex
Reemplazar Regex
fuente
Inicialmente, el valor predeterminado es
fullscreen
modalPresentationStyle, pero en iOS 13 sus cambios aUIModalPresentationStyle.automatic
.Si desea hacer el controlador de vista de pantalla completa, debe cambiarlo
modalPresentationStyle
afullScreen
.Consulte
UIModalPresentationStyle
la documentación de Apple para obtener más detalles y consulte las pautas de la interfaz humana de Apple para saber dónde debe usar qué modalidad.fuente
Puede hacerlo fácilmente Abra su guión gráfico como código fuente y busque
kind="presentation"
, en toda la etiqueta seague con kind = presentation agregue un atributo adicionalmodalPresentationStyle="fullScreen"
fuente
// si desea deshabilitar el deslizamiento para descartarlo, agregue una línea
Consulte el documento de Apple para obtener más información.
fuente
Lo logré usando el método swizzling (Swift 4.2):
Para crear una extensión UIViewController de la siguiente manera
y en AppDelegate, en la aplicación: didFinishLaunchingWithOptions: invoque el código swizzling llamando:
fuente
Esto funcionó para mí:
yourViewController.modalPresentationStyle = UIModalPresentationStyle.fullScreen
fuente
Cree una categoría para UIViewController (por ejemplo, UIViewController + PresentationStyle). Agregue el siguiente código.
fuente
un enfoque alternativo es tener su propio componente de controlador de vista base en su aplicación, y solo implementar los inicializadores designados y requeridos con una configuración básica, algo como lo siguiente:
NOTA : Si su controlador de vista está contenido en un controlador de navegación que en realidad se presenta modalmente, entonces el controlador de navegación debe abordar el problema de la misma manera (es decir, tener su componente de controlador de navegación personalizado personalizado de la misma manera
Probado en Xcode 11.1 en iOS 13.1 y iOS 12.4
Espero eso ayude
fuente
Tuve este problema con un video que ya no se presenta a pantalla completa. Se agregó esta línea, que salvó el día :-)
fuente
La solución más simple que funcionó para mí.
fuente
Si está utilizando un UINavigationController e incrusta un ViewController como un controlador de vista raíz, entonces también se planteará el mismo problema. Use el siguiente código para superar.
fuente
En lugar de llamar
self.modalPresentationStyle = .fullScreen
a cada controlador de vista, puede subclasificar UIViewController y simplemente usarlo enMyViewController
todas partes.fuente
Las respuestas y sugerencias anteriores son correctas, a continuación hay otra versión y una manera eficiente de usar mediante programación.
# 1 creó una extensión UIView
# 2 creó un método ()
Invocando como abajo
O
fuente