Как правильно установить фрейм UIViewControllers при представлении его поверх другого контроллера представления?

#ios #swift #uiviewcontroller

#iOS #быстрый #uiviewcontroller

Вопрос:

Я представляю UIViewController поверх другого контроллера представления, используя следующий код:

 let realityKitViewController = RealityKitViewController(localModelPath: modelPath) realityKitViewController.modalPresentationStyle = .overCurrentContext   // Hide the qr code scanner GAPP.tabbarCtrl.hideQrCodeScanner(withAnimation: true, completion: {  topController.present(realityKitViewController, animated: true, completion: nil) })  

В viewDidLoad() представленном контроллере представления я затем устанавливаю рамку:

 let tabbarHeight = GAPP.tabbarCtrl.getTabbarHeight() - self.view.safeAreaInsets.bottom self.view.frame = CGRect(x: 0, y: 0, width: self.view.frame.width, height: self.view.frame.height - tabbarHeight)  

Однако, когда я смотрю на иерархию представлений, я вижу, что UITransitionView и UIView представленного контроллера представления по-прежнему покрывают весь экран, если вместо него есть рамка, которую я установил viewDidLoad() .

иерархия представлений

Как я могу сделать UITransitionView и UIView контроллеров представленных представлений одним и тем же кадром, который я установил в контроллере viewDidLoad() представленных представлений?

Ответ №1:

Попробуйте установить рамку в viewWillLayoutSubviews() функции вместо viewDidLoad() . Похоже, что ваш ViewController еще не имеет всех правильных значений в viewDidLoad() функции. Установка рамки viewWillLayoutSubviews() приведет к обновлению вашей рамки перед каждым обновлением макета подвида.