¿Cambiar la propiedad displayMode de UISplitViewController al ingresar a la multitarea? (iOS 14)

thanks_muffin

¿Cómo puedo detectar cuándo se activa la multitarea del iPad (es decir, otra aplicación que aparece en pantalla, en paralelo con mi aplicación)?

Tengo un UISplitViewControllercon los siguientes parámetros configurados de la siguiente manera:

preferredDisplayMode = .twoBesideSecondary
preferredSplitBehavior = .tile
setViewController(SidebarVC(), for: .primary)
setViewController(SuppVC(), for: .supplementary)
setViewController(SecondaryVC(), for: .secondary)

En orientación horizontal, hay suficiente espacio para las 3 columnas ( .primary, .supplementary, .secondary). En retrato o en multitarea, el ancho de la pantalla es más estrecho y mi tercera columna ( .secondary) se aplasta a un ancho muy estrecho. La clase de tamaño horizontal sigue siendo regular, por lo que no puedo usarla para detectarla. (Cuando la clase de tamaño horizontal se vuelve compacta, mi UISplitViewController.compactmuestra y funciona bien).

Quiero cambiar la UISplitViewController.displayModepropiedad a .twoDisplaceSecondarycuando la pantalla es más estrecha, pero la clase de tamaño horizontal permanece regular (es decir, cuando está en vertical o cuando otra aplicación está en multitarea). Esto permitiría que la tercera columna fuera empujada fuera de la pantalla (desplazada) en lugar de aplastada.

Un ejemplo perfecto del comportamiento exacto que estoy buscando es la aplicación Contactos en iPad en iOS 14. Utiliza un diseño de triple columna, aparentemente con un displayMode de .tile. Cuando la aplicación está en pantalla completa en horizontal, se muestran las 3 columnas y hay suficiente espacio para que no se produzcan aplastamientos. Sin embargo, si lleva otra aplicación a la multitarea (lo que hace que el ancho de la aplicación Contactos sea más estrecho, pero la clase de tamaño horizontal permanece regular), el displayMode parece cambiar a .twoDisplaceSecondaryy la tercera columna se empuja fuera de la pantalla en lugar de aplastarse.

Creo que puedo administrar los cambios de orientación a través del viewWillTransitionToSize()método, pero no he podido encontrar un delegado u otra forma de detectar cuándo la aplicación es más estrecha, pero aún con una .regularclase de tamaño horizontal, como la aplicación Contactos, aparentemente puede hacerlo. .

Capturas de pantalla para mostrar lo que estoy haciendo referencia: Aplicación de contactos con columnas triples, ancho de pantalla completo Aplicación de contactos en multitarea, con tercera columna, desplazada

Puede ver que en la segunda captura de pantalla, la tercera columna se desplaza en lugar de aplastarse cuando no hay suficiente espacio.

thanks_muffin

Me di cuenta de que es importante configurar AMBOS .preferredDisplayModey .preferredSplitBehaviorcuándo cambia la vista. Establecer solo uno u otro resultará en muchos comportamientos extraños.

Para los futuros lectores, lo que descubrí que funciona para este caso es configurar preferredDisplayMode = .twoBesideSecondaryy preferredSplitBehavior = .tilecuando la pantalla es lo suficientemente ancha, luego configurar preferredDisplayMode = .oneBesideSecondaryy preferredSplitBehavior = .displacecuando la pantalla es estrecha. Usé una función que verifica si view.frame.size.width <1194 para determinar si la pantalla es de ancho completo o no, ya que usar la orientación solo causaría problemas si la aplicación está al lado de otra. Llamo a esto viewDidLoadtambién viewWillTransition(toSize:).

Este artículo se recopila de Internet, indique la fuente cuando se vuelva a imprimir.

En caso de infracción, por favor [email protected] Eliminar

Editado en
0

Déjame decir algunas palabras

0Comentarios
Iniciar sesiónRevisión de participación posterior

Artículos relacionados

Cambiar el color de la barra de estado al ingresar al modo de acción contextual

La etiqueta del estilo del selector de menú de iOS 14 se atenúa a veces al cambiar

por qué la propiedad de ancho está cambiando al cambiar la propiedad de relleno en html

Cómo cambiar la barra de estado (estilo / color) de UISplitViewController iOS 8

Evite que la conexión websocket se caiga al ingresar al estado de fondo ios swift

Cambiar src de la imagen al pasar el mouse con la propiedad de matriz

UIStackView no se anima al cambiar la propiedad oculta en iOS 9

Cómo abrir la barra multitarea de iOS en iOS iPad Simulator

Cómo abrir la barra multitarea de iOS en iOS iPad Simulator

El mapa rápido no funciona al cambiar la propiedad de la matriz

Actualizar la propiedad observada de Aurelia al cambiar a la matriz contenedora

"Error: la propiedad de tipo no se puede cambiar". Obteniendo error al usar la biblioteca ngTagInput (AngularJs)

Controlar la captura de pantalla en el conmutador multitarea de iOS 7

La propiedad de retardo de transición no funciona al cambiar de clase.

Cambiar la propiedad de salida de Powershell

Error "Error de tipo no detectado" al cambiar la propiedad de este objeto: JavaScript

La propiedad no existe en el tipo de error al cambiar de JS a TS

Cambiar la propiedad de ObservableCollection no hace nada

Yocto: cambiar la propiedad de /usr/lib

Cambiar el estado de la propiedad aprobada

Yocto: cambiar la propiedad de /usr/lib

* ngFor no se puede enviar el valor de la propiedad al cambiar el componente

Barra de navegación Jumpy al cambiar la altura (propiedad adhesiva)

Reaccionar - Cambiar la propiedad CSS al hacer clic (función de flecha)

Vue y Vuex: la propiedad calculada no se llama al cambiar de estado

Cómo cambiar la propiedad de imagen srcset al hacer clic usando javascript

¿Cómo cambiar la propiedad de una clase css al hacer clic en un botón?

Cambiar la propiedad de la superclase de la subclase

Modifique la vista de iOS mientras la aplicación está en segundo plano o en la vista multitarea