Почему мое дочернее представление не добавлено в мое представление прокрутки? - PullRequest
1 голос
/ 05 мая 2020

Я реализовал 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)
       )
    }

Он вызывает точно такой же метод, но вот он рабочий.

1 Ответ

1 голос
/ 05 мая 2020

Похоже, что с вашей реализацией просмотр прокрутки не может определить размер своего содержимого, поэтому его явная установка может решить вашу проблему. Что-то в строках scrollView.contentSize = scrollView.bounds.size устанавливает размер содержимого так, чтобы он заполнял вид прокрутки в обоих измерениях - что может быть не тем, что вы хотите для просмотра прокрутки, но это другое обсуждение.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...