it-swarm.com.ru

Загрузка ViewController внутри Контейнерного Представления

У меня есть ContainerView с полным экраном внутри ВК. Если я добавлю дочерний элемент в containerView вручную из раскадровки, выполнение перехода будет выглядеть нормально: enter image description here

Но если я вставлю VC по коду:

class BannerContainerVC: UIViewController {

    @IBOutlet weak var container: UIView!

    override func viewDidLoad() {
        super.viewDidLoad()
        let vc = storyboard?.instantiateViewControllerWithIdentifier("test") as UIViewController
        self.container.addSubview(vc.view)
    }
}

Я получаю супер странные результаты: 

enter image description here

18
Godfather

Вы должны сообщить своему контроллеру представления BannerContainer, что у него есть новый дочерний контроллер, и сообщить ребенку, что у него есть родительский VC. Это описано в Apple Docs здесь . Как это:

   [self addChildViewController:vc];
   vc.view.frame = CGRectMake(0, 0, self.container.frame.size.width, self.container.frame.size.height);
   [self.container addSubview:vc.view];
   [vc didMoveToParentViewController:self];

Или в Свифте:

    self.addChildViewController(vc)
    vc.view.frame = CGRectMake(0, 0, self.container.frame.size.width, self.container.frame.size.height);
    self.container.addSubview(vc.view)
    vc.didMoveToParentViewController(self)

Это гарантирует, что различные макеты и сенсорные методы передаются дочернему VC; Я подозреваю, что у вас могут быть проблемы с компоновкой из-за тех методов, которые в данный момент не вызываются.

55
pbasdf

Пытался использовать ответ выше, но оказалось, что CGRectMake больше не доступен.

Обновлено для Swift 3 :

self.addChildViewController(vc)
vc.view.frame = CGRect(x: 0, y: 0, width: self.container.frame.size.width, height: self.container.frame.size.height)
self.container.addSubview(vc.view)
vc.didMoveToParentViewController(self)
7
Luiz Dias

Просто вызовите эту функцию: 

private func addChildView(viewController: UIViewController, in view: UIView) {
    viewController.view.autoresizingMask = [.flexibleHeight, .flexibleWidth]
    viewController.view.frame = view.bounds
    addChild(viewController)
    view.addSubview(viewController.view)
    viewController.didMove(toParent: self)
 }
0
DEEPAK KUMAR