Обмен rootViewController на UIWindow не освобождает контроллер представления - PullRequest
0 голосов
/ 22 ноября 2018

Если вы поменяете rootViewController в UIWindow, например, чтобы представить окно входа в систему, если rootViewController представило (модальные) контроллеры представления, те представили контроллеры представления и, возможно, старый rootViewController * 1004.* не будет освобожден.

self.window.rootViewController = newViewController

1 Ответ

0 голосов
/ 22 ноября 2018

Вы должны всегда выполнять отмену всех модальных типов при замене rootViewController, в противном случае будет сохранен цикл.

if window?.rootViewController.presentedViewController != nil {
    window?.rootViewController.dismiss?(animated: false) {
        window?.rootViewController = newViewController
    }
}
else {
    window?.rootViewController.dismiss?(animated: false)
    window?.rootViewController = newViewController
}

Если вы хотите сделать хороший переход,Вы всегда можете обернуть его в анимацию:

func transition() {
    if window?.rootViewController.presentedViewController != nil {
        window?.rootViewController.dismiss?(animated: false) {
            window?.rootViewController = newViewController
        }
    }
    else {
        window?.rootViewController.dismiss?(animated: false)
        window?.rootViewController = newViewController
    }
}

UIView.transition(with: window!,
                  duration: 0.3,
                  options: .transitionCrossDissolve,
                  animations: transition)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...