#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()
приведет к обновлению вашей рамки перед каждым обновлением макета подвида.