Suche…


Bemerkungen

Beachten Sie beim Erstellen von anpassungsfähigen Apps die Einschränkungen der Größenklassen: Sie sind Verallgemeinerungen und keine spezifischen Anleitungen für genaue Pixelgrößen oder Geräte. Versuchen Sie niemals zu ermitteln, auf welchem ​​Gerät Ihre App ausgeführt wird oder ob es sich im Split-Screen-Modus befindet, basierend auf den Größenklassen.

Treffen Sie stattdessen Layoutentscheidungen auf hoher Ebene für die Größenklasse und verwenden Sie das automatische Layout, um genaue Ansichtsrahmen zu ändern. (Siehe auch die UIViewController-Methode viewWillTransition(to:with:) für eine genauere Benachrichtigung darüber, wie groß die Ansicht eines Controllers nach einem Übergang ist.)

Trait-Sammlungen

In einer iOS-App kann Ihre Benutzeroberfläche einige allgemeine Formen und Größen annehmen. Diese werden mithilfe von Größenklassen definiert, die über die Eigenschaftensammlung eines View- oder View-Controllers verfügbar sind.

Apple definiert zwei Größenklassen: normal und kompakt . Jede dieser Größenklassen ist auf beiden Achsen des Geräts ( horizontal und vertikal ) verfügbar. Ihre App kann sich während ihrer gesamten Lebensdauer in einem dieser vier Zustände befinden. Als Abkürzung beschreiben Entwickler häufig eine Größenklassenkombination, indem sie die beiden Größenklassen mit der horizontalen Achse zuerst sagen oder schreiben: "Compact / Regular" beschreibt eine Schnittstelle, die horizontal kompakt, aber vertikal regelmäßig ist.

Verwenden Sie in Ihrer App Methoden für das UITraitEnvironment-Protokoll, um Ihre aktuelle Größenklasse zu überprüfen und auf Änderungen zu reagieren:

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

Sowohl UIView als auch UIViewController sind mit UITraitEnvironment kompatibel, sodass Sie Ihre aktuelle Merkmalsauflistung anzeigen und Änderungen in Unterklassen von beiden bearbeiten können.

Automatisches Layout mit Änderungen der Merkmalserfassung aktualisieren

Um eine App anpassungsfähig zu machen, d. H. Auf Änderungen der Größenklasse durch Ändern des Layouts zu reagieren, ist häufig eine große Hilfe durch das Auto Layout-System erforderlich. Eine der wichtigsten Möglichkeiten, mit der Apps anpassungsfähig werden, besteht darin, die aktiven Einschränkungen für das automatische Layout zu aktualisieren, wenn sich die Größenklasse einer Ansicht ändert.

Stellen Sie sich beispielsweise eine App vor, die eine UIStackView zum Anordnen von zwei UILabels verwendet. Wir möchten, dass diese Etiketten in horizontal kompakten Umgebungen übereinander gestapelt werden. Wenn sich jedoch in horizontal regulären Umgebungen etwas mehr Platz befindet, sitzen wir nebeneinander.

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

Unterstützung für iOS Multitasking auf dem iPad

Ein Schlüsselelement der Adaptivität in einer modernen iOS-App ist die Unterstützung von Multitasking auf dem iPad. Standardmäßig werden in Xcode 7 und neuer erstellte Apps für die Unterstützung von Multitasking konfiguriert: Sie verfügen über eine LaunchScreen.storyboard-Datei, die Auto Layout verwendet.

Bestehende Apps können sich am einfachsten für Multitasking entscheiden, indem Sie ein solches Storyboard erstellen und es dann als Startbildschirm des Projekts festlegen:

Ein Startbildschirm-Storyboard hinzufügen

Konfigurieren der Option Launch Screen File

Wenn Ihre App das iPad-Multitasking unterstützt, prüfen Sie vorhandene Ansichten und Ansichtscontroller, um sicherzustellen, dass sie das automatische Layout verwenden und eine Vielzahl von Kombinationen von Größenklassen unterstützen.



Modified text is an extract of the original Stack Overflow Documentation
Lizenziert unter CC BY-SA 3.0
Nicht angeschlossen an Stack Overflow