Ich berechne itemSize abhängig vom sicheren Bereich für UICollectionView mit horizontalem Bildlauf und benutzerdefiniertem Layout.
Für das iPhone X hat der sichere Bereich jedoch unterschiedliche Größen für die unterschiedliche Ausrichtung. Meine Frage ist, wie sollte ich die sichere Bereichsgröße für die Querformatausrichtung in der Funktion viewWillTransition berechnen? Oder wie kann man auf diese Berechnung verzichten?
EDIT
Um die Größe eines sicheren Bereichs zu erhalten, ohne zusätzliche Ansichten zu erstellen, verwenden Sie diese Option
view.safeAreaLayoutGuide.layoutFrame.size
Wenn Sie die viewWillTransition
-Methode verwenden möchten, können Sie Folgendes verwenden:
override func viewWillTransition(to size: CGSize, with coordinator: UIViewControllerTransitionCoordinator) {
super.viewWillTransition(to: size, with: coordinator)
// Before rotation
print(view.safeAreaLayoutGuide.layoutFrame.size)
coordinator.animate(alongsideTransition: { (context) in
// During rotation
}) { (context) in
// After rotation
print(self.view.safeAreaLayoutGuide.layoutFrame.size)
}
}
Im Vervollständigungsblock erhalten Sie Ihre gewünschte Größe. Beachten Sie jedoch, dass dieser Code after der Rotation lautet.
Ursprüngliche Antwort
Lösung mit zusätzlicher UIView:
Was ich tat, war, eine UIView
zu erstellen und sie mit konstanter 0 an Safe Area Guides anzuheften, damit sie immer der Größe des Safe Area entspricht:
Ich habe einen @IBOutlet
dieser UIView
erstellt und in viewDidLayoutSubviews()
die Größe überprüft:
override func viewDidLayoutSubviews() {
super.viewDidLayoutSubviews()
print(containerView.frame.size)
}
Nach dem Drehen bekomme ich auch die aktualisierte Größe dieser UIView.
Verwenden Sie die CollectionView von UICollectionViewDelegateFlowLayout (_: layout: sizeForItemAt :). Funktioniert wie ein Charm . Festlegen der Größe im Vervollständigungsblock von coordinator.animate (nebenTransition: Completion :) in viewWillTransition (bis: with :) hat für mich nicht funktioniert, da die Größenanimation nach Beendigung der Orientierungsanimation erfolgt das sieht komisch aus.