Ответ 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.