iOS
Klasy wielkości i adaptacyjność
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:
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.