Как получить высоту экрана после изменения ориентации? ⇐ IOS
-
Anonymous
Как получить высоту экрана после изменения ориентации?
Я получаю странные результаты при запросе UIScreen.main.bounds.height после изменения ориентации. Возможно, это неправильный способ.
У меня есть наблюдатель, который прослушивает событие NSNotification.Name.UIDeviceOrientationDidChange:
NotificationCenter.default.addObserver(self, селектор: #selector(self.orientationChange), имя: NSNotification.Name.UIDeviceOrientationDidChange, объект: ноль) При этом вызывается функция, которая устанавливает ограничение на 75 % от новой высоты экрана. Это отлично работает на iPhone, но iPad возвращает неправильную высоту экрана.
Если iPad находится в альбомной ориентации, UIScreen.main.bounds.height вернет значение, равное высоте в портретной ориентации и наоборот.
func OrientationChange() { // Это выведет правильное значение на iPhone и iPad. если UIDevice.current.orientation.isLandscape { печать("Пейзаж") } еще { печать("Портрет") } пусть screenSize = UIScreen.main.bounds пусть screenHeight = screenSize.height self.searchViewHeightConstraint.constant = screenHeight * 0,75 // Правильное значение на iPhone. Неверно на iPad. print("screenHeight: '\(screenHeight)'") UIView.animate(withDuration: 0,6, задержка: 0, usingSpringWithDamping: 0,8, InitialSpringVelocity: 0, параметры: .curveEaseOut, анимации: { self.searchView.superview?.layoutIfNeeded() }, завершение: ноль) } Я также сталкивался с методом viewWilltransition для мониторинга изменения ориентации, но он ведет себя совершенно противоположным методу, описанному выше. то есть. высота правильная на iPad, но неправильная на iPhone:
override func viewWillTransition(to size: CGSize, с координатором: UIViewControllerTransitionCoordinator) { пусть screenSize = UIScreen.main.bounds пусть screenHeight = screenSize.height self.searchViewHeightConstraint.constant = screenHeight * 0,75 // Правильное значение на iPad. Неверно на iPhone. print("screenHeight: '\(screenHeight)'") } В чем причина такого несогласованного поведения между iPhone и iPad и является ли использование NotificationCenter правильным подходом к мониторингу изменения ориентации?
Я получаю странные результаты при запросе UIScreen.main.bounds.height после изменения ориентации. Возможно, это неправильный способ.
У меня есть наблюдатель, который прослушивает событие NSNotification.Name.UIDeviceOrientationDidChange:
NotificationCenter.default.addObserver(self, селектор: #selector(self.orientationChange), имя: NSNotification.Name.UIDeviceOrientationDidChange, объект: ноль) При этом вызывается функция, которая устанавливает ограничение на 75 % от новой высоты экрана. Это отлично работает на iPhone, но iPad возвращает неправильную высоту экрана.
Если iPad находится в альбомной ориентации, UIScreen.main.bounds.height вернет значение, равное высоте в портретной ориентации и наоборот.
func OrientationChange() { // Это выведет правильное значение на iPhone и iPad. если UIDevice.current.orientation.isLandscape { печать("Пейзаж") } еще { печать("Портрет") } пусть screenSize = UIScreen.main.bounds пусть screenHeight = screenSize.height self.searchViewHeightConstraint.constant = screenHeight * 0,75 // Правильное значение на iPhone. Неверно на iPad. print("screenHeight: '\(screenHeight)'") UIView.animate(withDuration: 0,6, задержка: 0, usingSpringWithDamping: 0,8, InitialSpringVelocity: 0, параметры: .curveEaseOut, анимации: { self.searchView.superview?.layoutIfNeeded() }, завершение: ноль) } Я также сталкивался с методом viewWilltransition для мониторинга изменения ориентации, но он ведет себя совершенно противоположным методу, описанному выше. то есть. высота правильная на iPad, но неправильная на iPhone:
override func viewWillTransition(to size: CGSize, с координатором: UIViewControllerTransitionCoordinator) { пусть screenSize = UIScreen.main.bounds пусть screenHeight = screenSize.height self.searchViewHeightConstraint.constant = screenHeight * 0,75 // Правильное значение на iPad. Неверно на iPhone. print("screenHeight: '\(screenHeight)'") } В чем причина такого несогласованного поведения между iPhone и iPad и является ли использование NotificationCenter правильным подходом к мониторингу изменения ориентации?
Мобильная версия