Zoeken…


Opmerkingen

Houd bij het bouwen van adaptieve apps rekening met de beperkingen van grootteklassen: dit zijn generalisaties , geen specifieke handleidingen voor exacte pixelgroottes of apparaten. Probeer nooit te bepalen op welk apparaat uw app wordt uitgevoerd, of dat het in een gesplitst scherm-modus is, op basis van de grootteklassen.

Neem in plaats daarvan beslissingen op het hoogste niveau voor de indeling van de grootteklasse en gebruik Auto Layout om nauwkeurige weergaveframes te wijzigen. (Zie ook de UIViewController-methode viewWillTransition(to:with:) voor een preciezere melding van hoe groot de weergave van een controller zal zijn na een overgang.)

Eigenschap collecties

In een iOS-app kan uw gebruikersinterface een aantal verschillende algemene vormen en formaten aannemen. Deze worden gedefinieerd met behulp van grootteklassen , die beschikbaar zijn via een weergave of de eigenschappenverzameling van een weergavecontroller.

Apple definieert twee grootteklassen: normaal en compact . Elk van deze grootteklassen is beschikbaar op beide assen van het apparaat ( horizontaal en verticaal ). Uw app bestaat mogelijk gedurende de hele levensduur van deze vier staten. Om te beginnen beschrijven ontwikkelaars vaak een combinatie van grootteklassen door de twee grootteklassen uit te spreken of te schrijven, met de horizontale as eerst: "Compact / Normaal" beschrijft een interface die horizontaal compact maar verticaal regelmatig is.

Gebruik in uw app methoden op het UITraitEnvironment-protocol om uw huidige grootteklasse te controleren en te reageren op wijzigingen:

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

Zowel UIView als UIViewController voldoen aan UITraitEnvironment, zodat u uw huidige eigenschappenverzameling kunt bekijken en wijzigingen in subklassen van beide kunt verwerken.

Auto-indeling bijwerken met wijzigingen in eigenschappenverzameling

Een app adaptief maken - dat wil zeggen reageren op veranderingen in de grootteklasse door uw lay-out te wijzigen - vereist vaak veel hulp van het Auto Layout-systeem. Een van de belangrijkste manieren waarop apps zich aanpassen, is door de actieve Auto Layout-beperkingen bij te werken wanneer de grootteklasse van een weergave verandert.

Overweeg bijvoorbeeld een app die een UIStackView gebruikt om twee UILabels te rangschikken. We willen misschien dat deze labels op elkaar worden gestapeld in horizontaal compacte omgevingen, maar naast elkaar zitten als we iets meer ruimte hebben in horizontaal normale omgevingen.

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

Ondersteunt iOS Multitasking op iPad

Een belangrijk onderdeel van adaptiviteit in een moderne iOS-app is multitasking op iPad. Standaard worden apps gemaakt in Xcode 7 en nieuwer geconfigureerd om multitasking te ondersteunen: ze hebben een LaunchScreen.storyboard-bestand dat Auto Layout gebruikt.

De eenvoudigste manier voor bestaande apps om zich aan te melden voor multitasking is om een dergelijk storyboard te maken en het vervolgens in te stellen als het startscherm van het project:

Een storyboard voor het startscherm toevoegen

Configureren van de optie Launch Screen File

Zodra uw app multitasking op de iPad ondersteunt, controleert u bestaande weergaven en weergavecontrollers om te controleren of ze Auto Layout gebruiken en verschillende grootteklassecombinaties kunnen ondersteunen.



Modified text is an extract of the original Stack Overflow Documentation
Licentie onder CC BY-SA 3.0
Niet aangesloten bij Stack Overflow