Подтвердить что ты не робот

Как рассчитать размер iOS 11 в другой ориентации?

Я вычисляю itemSize в зависимости от безопасной области для UICollectionView с горизонтальной прокруткой и пользовательским макетом.

image

Но для iPhone X безопасная область имеет разный размер для различной ориентации. Мой вопрос заключается в том, как мне рассчитать безопасный размер области для ландшафтной ориентации в viewWillTransition? Или как это можно обойти без этого расчета?

4b9b3361

Ответ 1

ИЗМЕНИТЬ

Чтобы получить безопасный размер области без создания каких-либо дополнительных видов, используйте это:

view.safeAreaLayoutGuide.layoutFrame.size

Если вы хотите использовать метод viewWillTransition, вы можете использовать это:

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

В блоке завершения вы получите желаемый размер, обратите внимание, что этот код будет называться после.

Оригинальный ответ

Решение с использованием дополнительного UIView:

То, что я сделал, это создать UIView и привязать его с помощью константы 0 к направляющим для безопасной области, чтобы он всегда соответствовал размеру безопасной области:

введите описание изображения здесь

Я создал @IBOutlet этого UIView и в viewDidLayoutSubviews() проверить размер:

override func viewDidLayoutSubviews() {
    super.viewDidLayoutSubviews()

    print(containerView.frame.size)
}

После поворота я также получаю обновленный размер этого UIView.