Recherche…


Remarques

Lorsque vous créez des applications adaptatives, gardez à l'esprit les limites des classes de taille: ce sont des généralisations , et non des guides spécifiques pour les tailles de pixels ou les périphériques exacts. Ne tentez jamais de déterminer sur quel périphérique votre application s'exécute ou si elle est en mode écran partagé, en fonction des classes de taille.

Au lieu de cela, prenez des décisions de mise en page de haut niveau sur la classe de taille et utilisez la disposition automatique pour modifier des cadres de vue précis. (Voir aussi la méthode viewWillTransition(to:with:) pour une notification plus précise de la taille de la vue d'un contrôleur après une transition.)

Collections de traits

Dans une application iOS, votre interface utilisateur peut prendre différentes formes et tailles. Celles-ci sont définies à l'aide de classes de taille disponibles dans une vue ou dans la collection de traits du contrôleur.

Apple définit deux classes de taille: régulière et compacte . Chacune de ces classes de taille est disponible sur les deux axes de l'appareil ( horizontal et vertical ). Votre application peut exister dans ces quatre états tout au long de sa vie. En résumé, les développeurs décrivent souvent une combinaison de classes de taille en disant ou en écrivant les deux classes de taille, l'axe horizontal en premier: "Compact / Regular" décrit une interface horizontalement compacte mais verticale.

Dans votre application, utilisez les méthodes du protocole UITraitEnvironment pour vérifier votre classe de taille actuelle et répondre aux modifications:

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.")
    }
}

UIView et UIViewController sont tous deux conformes à UITraitEnvironment. Vous pouvez donc examiner votre collection de traits en cours et gérer les modifications des sous-classes.

Mise à jour de la mise en page automatique avec les modifications apportées à la collection de caractéristiques

Faire en sorte que l’application soit adaptative - c’est-à-dire répondre aux changements de classe de taille en modifiant votre disposition - implique souvent une grande aide du système Auto Layout. L'une des principales façons dont les applications deviennent adaptatives consiste à mettre à jour les contraintes de mise en forme automatique actives lorsque la classe de taille d'une vue change.

Par exemple, considérez une application qui utilise un UIStackView pour organiser deux UILabels. Nous pourrions souhaiter que ces étiquettes s’empilent les unes sur les autres dans des environnements horizontalement compacts, mais s’assoient côte à côte lorsque nous avons un peu plus de place dans des environnements horizontaux réguliers.

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
        }
    }
}

Prise en charge du multitâche iOS sur iPad

Un élément clé de l'adaptabilité d'une application iOS moderne est le multitâche sur iPad. Par défaut, les applications créées dans Xcode 7 et versions ultérieures seront configurées pour prendre en charge le multitâche: elles contiendront un fichier LaunchScreen.storyboard utilisant la mise en page automatique.

La manière la plus simple pour les applications existantes d’opter pour le multitâche est de créer un tel storyboard, puis de le définir comme écran de lancement du projet:

Ajouter un storyboard écran de lancement

Configuration de l'option de fichier d'écran de lancement

Une fois que votre application prend en charge le multitâche iPad, auditez les vues existantes et affichez les contrôleurs pour vous assurer qu'ils utilisent la mise en page automatique et peuvent prendre en charge diverses combinaisons de classes de taille.



Modified text is an extract of the original Stack Overflow Documentation
Sous licence CC BY-SA 3.0
Non affilié à Stack Overflow