Szukaj…


Uwagi

Tworząc aplikacje adaptacyjne, pamiętaj o ograniczeniach klas wielkości: są to uogólnienia , a nie konkretne przewodniki dotyczące dokładnych rozmiarów pikseli lub urządzeń. Nigdy nie próbuj ustalać, na jakim urządzeniu działa Twoja aplikacja lub czy działa ona w trybie podzielonego ekranu, na podstawie klas wielkości.

Zamiast tego podejmuj decyzje dotyczące układu na wysokim poziomie w odniesieniu do klasy rozmiaru i użyj Układu automatycznego, aby zmieniać precyzyjne ramki widoku. (Zobacz także metodę viewWillTransition(to:with:) aby uzyskać bardziej precyzyjne powiadomienie o tym, jak duży będzie widok kontrolera po przejściu).

Kolekcje cech

W aplikacji na iOS interfejs użytkownika może przybierać jeden z kilku ogólnych kształtów i rozmiarów. Są one definiowane za pomocą klas wielkości , które są dostępne poprzez kolekcję cech widoku kontrolera widoku.

Apple definiuje dwie klasy wielkości: zwykłą i kompaktową . Każda z tych klas wielkości jest dostępna na obu osiach urządzenia ( poziomej i pionowej ). Twoja aplikacja może istnieć w każdym z tych czterech stanów przez cały okres jej użytkowania. Krótko mówiąc, programiści często opisują kombinację klas wielkości, wypowiadając lub pisząc dwie klasy wielkości, najpierw osią poziomą: „Kompaktowy / Regularny” opisuje interfejs, który jest kompaktowy poziomo, ale pionowo regularny.

W swojej aplikacji użyj metod w protokole UITraitEnvironment, aby sprawdzić aktualną klasę wielkości i zareagować na zmiany:

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

Zarówno UIView, jak i UIViewController są zgodne z UITraitEnvironment, dzięki czemu możesz przeglądać swoją aktualną kolekcję cech i obsługiwać zmiany w podklasach obu.

Aktualizowanie automatycznego układu o zmiany w zbiorze cech

Dokonywanie app adaptacyjne - to znaczy, odpowiadając na klasy wielkości zmian zmieniając układ - często wiąże się wiele pomocy z systemu Auto Układ. Jednym z głównych sposobów adaptacji aplikacji jest aktualizacja aktywnych ograniczeń automatycznego układu, gdy zmienia się klasa wielkości widoku.

Rozważmy na przykład aplikację korzystającą z UIStackView w celu ustawienia dwóch etykiet UIL. Możemy chcieć, aby te etykiety układały się jedna na drugiej w poziomo zwartych środowiskach, ale siedzą obok siebie, gdy mamy trochę więcej miejsca w normalnie poziomych środowiskach.

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

Obsługuje wielozadaniowość iOS na iPadzie

Kluczowym elementem adaptacji w nowoczesnej aplikacji na iOS jest obsługa wielozadaniowości na iPadzie. Domyślnie aplikacje utworzone w Xcode 7 i nowszych będą skonfigurowane do obsługi wielozadaniowości: będą miały plik LaunchScreen.storyboard, który używa Auto Layout.

Najłatwiejszym sposobem włączenia istniejących aplikacji do wielozadaniowości jest utworzenie takiej scenorysu, a następnie ustawienie jej jako ekranu uruchamiania projektu:

Dodawanie scenorysu ekranu uruchamiania

Konfigurowanie opcji Uruchom plik ekranu

Gdy Twoja aplikacja obsługuje wielozadaniowość iPada, kontroluj istniejące widoki i kontrolery widoków, aby upewnić się, że używają one automatycznego układu i mogą obsługiwać różne kombinacje klas wielkości.



Modified text is an extract of the original Stack Overflow Documentation
Licencjonowany na podstawie CC BY-SA 3.0
Nie związany z Stack Overflow