samsung note ios iphone ipad uiinterfaceorientation size-classes

ios - samsung - galaxy note 7



iPad Landscape y Portrait diferentes diseƱos con Size Class (4)

Finalmente encontré una solución:

if traitCollection.verticalSizeClass == .Regular && traitCollection.horizontalSizeClass == .Regular { var orientation:UIInterfaceOrientation = UIApplication.sharedApplication().statusBarOrientation; if orientation == UIInterfaceOrientation.LandscapeLeft || orientation == UIInterfaceOrientation.LandscapeRight { // orientation is landscape } else { // orientation is portrait } }

Cómo diseñar pantallas horizontales y verticales de iPad con diferentes diseños utilizando la clase Tamaño. Solo pude encontrar w-regular y h-regular para ambas orientaciones. Ejemplo: Necesito alinear 2 vistas verticalmente en vertical y horizontalmente en horizontal usando la Clase de Tamaño


Para Swift 3 se vería así:

override func overrideTraitCollection(forChildViewController childViewController: UIViewController) -> UITraitCollection? { if UI_USER_INTERFACE_IDIOM() == .pad && view.bounds.width > view.bounds.height { let collections = [UITraitCollection(horizontalSizeClass: .regular), UITraitCollection(verticalSizeClass: .compact)] return UITraitCollection(traitsFrom: collections) } return super.overrideTraitCollection(forChildViewController: childViewController) }

Utilizará wRhC en lugar de wRhR para dispositivos iPad en modo horizontal. Coloque este código en su controlador de vista base, es decir, esta regla funcionará para todos los controladores presentados por este. Puede poner cualquier condición adicional aquí ... Por ejemplo, si desea que esta regla funcione solo para el controlador de vista específico, su operador if se vería así:

if UI_USER_INTERFACE_IDIOM() == .pad && childViewController is YourSpecificViewController && view.bounds.width > view.bounds.height { let collections = [UITraitCollection(horizontalSizeClass: .regular), UITraitCollection(verticalSizeClass: .compact)] return UITraitCollection(traitsFrom: collections) }


Parece ser la intención de Apple tratar ambas orientaciones de iPad como iguales, pero como muchos de nosotros estamos descubriendo, hay motivos de diseño muy legítimos para querer variar el diseño de la interfaz de usuario para iPad Retrato frente a iPad Paisaje.

Sin embargo, consulte esta respuesta para obtener otro enfoque para adaptar las clases de tamaño para hacer lo que necesitamos: https://.com/a/28268200/4517929


Swift 4

override func overrideTraitCollection(forChildViewController childViewController: UIViewController) -> UITraitCollection? { if UIDevice.current.userInterfaceIdiom == .pad && UIDevice.current.orientation.isLandscape { return UITraitCollection(traitsFrom:[UITraitCollection(verticalSizeClass: .compact), UITraitCollection(horizontalSizeClass: .regular)]) } return super.overrideTraitCollection(forChildViewController: childViewController) }

Me gusta crear una subclase personalizada de navigationController y luego configurar un controlador de navegación inicial de guiones gráficos para esa clase. También puedes hacer algo similar con un ViewController .

Ejemplo:

import UIKit class NavigationControllerWithTraitOverride: UINavigationController { // If you make a navigationController a member of this class the descendentVCs of that navigationController will have their trait collection overridden with compact vertical size class if the user is on an iPad and the device is horizontal. override func overrideTraitCollection(forChildViewController childViewController: UIViewController) -> UITraitCollection? { if UIDevice.current.userInterfaceIdiom == .pad && UIDevice.current.orientation.isLandscape { return UITraitCollection(traitsFrom:[UITraitCollection(verticalSizeClass: .compact), UITraitCollection(horizontalSizeClass: .regular)]) } return super.overrideTraitCollection(forChildViewController: childViewController) } }

Nota: no debe anular traitCollection según los docs

Importante

Usa la propiedad traitCollection directamente. No lo anules. No proporcione una implementación personalizada.