Buscar..


Observaciones

Al crear aplicaciones adaptables, tenga en cuenta las limitaciones de las clases de tamaño: son generalizaciones , no guías específicas para tamaños de píxeles o dispositivos exactos. Nunca intente determinar en qué dispositivo se está ejecutando su aplicación, o si está en un modo de pantalla dividida, según las clases de tamaño.

En su lugar, tome decisiones de diseño de alto nivel en la clase de tamaño y use Diseño automático para cambiar los marcos de vista precisos. (Vea también el método viewWillTransition(to:with:) para una notificación más precisa de qué tan grande será la vista de un controlador después de una transición).

Colecciones de rasgos

En una aplicación iOS, su interfaz de usuario puede adoptar una de varias formas y tamaños generales diferentes. Estos se definen utilizando clases de tamaño , que están disponibles a través de una vista o colección de rasgos del controlador de vista.

Apple define dos clases de tamaño: regular y compacto . Cada una de estas clases de tamaño está disponible en ambos ejes del dispositivo ( horizontal y vertical ). Su aplicación puede existir en cualquiera de estos cuatro estados durante su vida útil. Como abreviatura, los desarrolladores a menudo describen una combinación de clase de tamaño diciendo o escribiendo las dos clases de tamaño, con el eje horizontal primero: "Compacto / Regular" describe una interfaz que es horizontalmente compacta pero verticalmente regular.

En su aplicación, use métodos en el protocolo de Entorno del Medio Ambiente para verificar su clase de tamaño actual y responder a los cambios:

class MyViewController: UIViewController {
    override func viewDidAppear(_ animated: Bool) {
        super.viewDidAppear(animated)
        print("Horizontal size class: \(traitCollection.horizontalSizeClass)")
        print("Vertical size class: \(traitCollection.verticalSizeClass)")
    }

    override func traitCollectionDidChange(_ previousTraitCollection: UITraitCollection?) {
        super.traitCollectionDidChange(previousTraitCollection)
        print("Trait collection changed; size classes may be different.")
    }
}

Tanto UIView como UIViewController se ajustan a UITraitEnvironment, por lo que puede ver su colección actual de rasgos y manejar los cambios en las subclases de cualquiera de ellos.

Actualización del diseño automático con cambios de colección de rasgos

Hacer que una aplicación sea adaptable , es decir, responder a los cambios de tamaño de la clase al cambiar su diseño, a menudo implica mucha ayuda del sistema de diseño automático. Una de las principales formas en que las aplicaciones se adaptan es mediante la actualización de las restricciones de diseño automático activas cuando cambia la clase de tamaño de una vista.

Por ejemplo, considere una aplicación que utiliza un UIStackView para organizar dos UILabels. Podríamos querer que estas etiquetas se apilen unas sobre otras en entornos horizontalmente compactos, pero nos sentamos uno al lado del otro cuando tengamos un poco más de espacio en entornos horizontalmente regulares.

class ViewController: UIViewController {
    var stackView: UIStackView!
    
    override func viewDidLoad() {
        super.viewDidLoad()
        
        stackView = UIStackView()
        for text in ["foo", "bar"] {
            let label = UILabel()
            label.translatesAutoresizingMaskIntoConstraints = false
            label.text = text
            stackView.addArrangedSubview(label)
        }
        
        view.addSubview(stackView)
        stackView.translatesAutoresizingMaskIntoConstraints = false
        stackView.centerXAnchor.constraint(equalTo: view.centerXAnchor).isActive = true
        stackView.centerYAnchor.constraint(equalTo: view.centerYAnchor).isActive = true
    }
    
    override func viewDidAppear(_ animated: Bool) {
        super.viewDidAppear(animated)
        updateAxis(forTraitCollection: traitCollection)
    }
    
    override func traitCollectionDidChange(_ previousTraitCollection: UITraitCollection?) {
        super.traitCollectionDidChange(previousTraitCollection)
        updateAxis(forTraitCollection: traitCollection)
    }
    
    private func updateAxis(forTraitCollection traitCollection: UITraitCollection) {
        switch traitCollection.horizontalSizeClass {
        case .regular:
            stackView.axis = .horizontal
        case .compact:
            stackView.axis = .vertical
        case .unspecified:
            print("Unspecified size class!")
            stackView.axis = .horizontal
        }
    }
}

Compatibilidad con la multitarea de iOS en iPad

Una pieza clave de la adaptabilidad en una aplicación moderna de iOS es el soporte de multitarea en iPad. De forma predeterminada, las aplicaciones creadas en Xcode 7 y más nuevas se configurarán para admitir la multitarea: tendrán un archivo LaunchScreen.storyboard que utiliza el diseño automático.

La forma más fácil para que las aplicaciones existentes opten por la multitarea es crear un guión gráfico de ese tipo y luego configurarlo como la pantalla de inicio del proyecto:

Añadiendo un guión gráfico de pantalla de inicio

Configuración de la opción de archivo de pantalla de inicio

Una vez que su aplicación admita la multitarea del iPad, audite las vistas existentes y los controladores de vista para asegurarse de que utilicen el diseño automático y puedan admitir una variedad de combinaciones de clases de tamaño.



Modified text is an extract of the original Stack Overflow Documentation
Licenciado bajo CC BY-SA 3.0
No afiliado a Stack Overflow