Я реализовал Hamburger Menu , которое вызывается, когда пользователь нажимает на BarButtonItem .
Когда пользователь щелкает индекс меню, вызывается метод делегата и выбирает правильную строку:
func rowTapped(index: MenuIndex) {
let vc1 = storyboard?.instantiateViewController(withIdentifier: "VC1") as! VC!
// lazy loading
_ = vc1.self.view
vc1.transitionToNew(index)
}
И в моем VC1 вызывается метод ** transitionToNew ** и выбирает правильный индекс: (Предположим, что пользователь нажал индекс 1, который связан с. a)
func transitionToNew(_ index : MenuIndex) {
switch index {
case .a:
addSubviewToContainer(asChildViewController: childVC)
...
}
Теперь childV C следует добавить в scrollView моего VC1 .
childV C создается ленивым:
private lazy var childVC: ChildVC = {
let viewController = self.storyboard?.instantiateViewController(withIdentifier: "ChildVC") as! ChildVC
return viewController
}()
Чтобы добавить childV C в scrollView the addSubViewToContainer * метод вызывается в операторе switch-case:
private func addSubviewToContainer(asChildViewController viewController: UIViewController)
{
viewController.view.autoresizingMask = [.flexibleHeight, .flexibleWidth]
viewController.view.frame = scrollView.bounds
addChildViewController(viewController)
scrollView.addSubview(viewController.view)
viewController.didMove(toParentViewController: self)
}
Я знаю, что экземпляры создаются lazy (к сожалению), поэтому нам нужно ввести что-то вроде
_ = self.view
(хотя это глупый взлом) для создания экземпляра представления, которое действительно показывает мне, что мой scrollView Создан экземпляр (по крайней мере, я так думаю, потому что предварительный просмотр в отладчике показывает мне представление)
Может ли кто-нибудь сказать мне, не видя всего кода, почему мой childV C не добавляется и не отображается (!?) в моем scrollView ?
Я получил правильный фрейм, scrollView должен быть создан в момент, когда пользователь нажимает index.
ОБНОВЛЕНИЕ
У меня также есть несколько кнопок навигации, которые может выбрать пользователь:
@IBAction func navigateToChildVC(_ sender: UIButton) {
addSubviewToContainer(asChildViewController: childVC)
)
}
Он вызывает точно такой же метод, но вот он рабочий.