Как получить высоту экрана после изменения ориентации?IOS

Программируем под IOS
Ответить
Anonymous
 Как получить высоту экрана после изменения ориентации?

Сообщение 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 правильным подходом к мониторингу изменения ориентации?
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «IOS»