В дополнение к предыдущему вопросу Я думал, что взломал его, но нет. Я хочу получить доступ к safearealayoutguide
для размещения подпредставлений на экранах в контроллере панели вкладок. Первоначально рамка Safeareaguide совпадает с view.frame
при первой загрузке. Я думал, что хитрость заключается в том, чтобы получить доступ к override func viewDidLayoutSubviews()
, но это работает только в простом контроллере представления, то есть не в виртуальном контроллере внутри контроллера панели вкладок. Безопасные габаритные размеры появляются только после того, как я переключаюсь на другой экран и обратно. Это не идеально. Есть ли способ принудительно обновить безопасные размеры направляющих сразу (или вскоре после viewDidLoad
)?
override func viewDidLoad() {
super.viewDidLoad()
setupView()
print(view.frame)
}
override func viewWillLayoutSubviews() {
super.viewWillLayoutSubviews()
print("ViewWillLayout: \(view.safeAreaLayoutGuide.layoutFrame)")
}
override func viewDidAppear(_ animated: Bool) {
super.viewDidAppear(true)
print("ViewDidAppear \(view.safeAreaLayoutGuide.layoutFrame)")
}
override func viewDidLayoutSubviews() {
super.viewDidLayoutSubviews()
print("ViewDidLayoutSubviews \(view.safeAreaLayoutGuide.layoutFrame)")
}
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(true)
print("ViewWillAppear \(view.safeAreaLayoutGuide.layoutFrame)")
}
Все методы возвращают безопасную направляющую того же размера, что и view.frame при начальной загрузке.
Первоначально:
- ViewWillLayout: (0,0, 0,0, 375,0, 667,0)
- ViewDidLayoutSubviews (0,0, 0,0, 375,0, 667,0)
- ViewWillLayout: (0,0, 0,0, 375,0, 667,0)
- ViewDidLayoutSubviews (0.0, 0.0, 375.0, 667.0)
После выбора другого ВК в tabbarcontroller и возврата к исходному ВК:
- ViewWillLayout: (0,0, 64,0, 375,0, 554,0)
- ViewDidLayoutSubviews (0.0, 64.0, 375.0, 554.0)
- ViewDidAppear (0,0, 64,0, 375,0, 554,0)
Предложения, пожалуйста.
Я использую XCode 10, iOS 11.4, платы без историй.