webentwicklung-frage-antwort-db.com.de

Wie berechnet man die Größe von iOS 11 in unterschiedlicher Ausrichtung?

Ich berechne itemSize abhängig vom sicheren Bereich für UICollectionView mit horizontalem Bildlauf und benutzerdefiniertem Layout.

image

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?

15
bogmila

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:

 enter image description here

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.

11
jonaszmclaren

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.

0
GK100