¿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 UISplitViewController
con 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.compact
muestra y funciona bien).
Quiero cambiar la UISplitViewController.displayMode
propiedad a .twoDisplaceSecondary
cuando 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 .twoDisplaceSecondary
y 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 .regular
clase de tamaño horizontal, como la aplicación Contactos, aparentemente puede hacerlo. .
Capturas de pantalla para mostrar lo que estoy haciendo referencia:
Puede ver que en la segunda captura de pantalla, la tercera columna se desplaza en lugar de aplastarse cuando no hay suficiente espacio.
Me di cuenta de que es importante configurar AMBOS .preferredDisplayMode
y .preferredSplitBehavior
cuá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 = .twoBesideSecondary
y preferredSplitBehavior = .tile
cuando la pantalla es lo suficientemente ancha, luego configurar preferredDisplayMode = .oneBesideSecondary
y preferredSplitBehavior = .displace
cuando 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 viewDidLoad
tambié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
Déjame decir algunas palabras