почему это происходит только на iPad, а не на iPhone?
Потому что, когда вы нажимаете Home на iPad, и приложение переходит в фоновый режим, среда выполнения делает два снимка, один вкаждую ориентацию, чтобы использовать в интерфейсе App Switcher (и в подготовке к тому, когда приложение возвращается на передний план).Это означает, что оно должно вращать приложение, которое запускает макет, и поэтому ваш viewDidLayoutSubviews
называется.
Жаль, что только сейчас я увидел, как это происходит.это что-то новое в iOS?Какой правильный способ справиться с этим?Я не использую автоматическое расположение его вызова с неправильными границами, и я не хочу вычислять все кадры ячеек только для того, чтобы пользователь вернулся в ту же ориентацию.Я кормлю, как будто я упускаю что-то очень простое здесь, ИЛИ есть некоторые изменения в iOS, о которых я не знаю.
Что ж, iPad уже давно так себя ведет.Моя работа не в том, чтобы объяснить, почему ты не заметил.По сути, вы не должны делать ничего трудоемкого в viewDidLayoutSubviews
.
На данный момент мое исправление состоит в том, чтобы проверить, находится ли приложение в фоновом состоянии, и игнорировать viewDidLayoutView
Это вполне разумно.Я делаю то же самое.Например (это другой метод, но это та же идея):
override func viewWillTransition(to size: CGSize, with tc: UIViewControllerTransitionCoordinator) {
if UIApplication.shared.applicationState == .background {
return
}
// ...
}
Имейте в виду, однако, что если вы делаете макет вручную, и вы не делаете это, когда приложение входит вна заднем плане ваши снимки App Switcher могут выглядеть неправильно.Кроме того, тот факт, что вы не используете autolayout, является красным флагом.Вы, вероятно, должны использовать его.