Показать контроллер представления в подпредставлении - PullRequest
0 голосов
/ 04 января 2019

Можно ли показать / добавить контроллер вида в UIView? Если да, может кто-то помочь, как я пытался, но я не могу понять это. Ниже приведен текущий код, который я использую. Заранее спасибо

if let keyWindow = UIApplication.shared.keyWindow {

    //container view           
    let containerFrame  = CGRect(x: 0, y: keyWindow.frame.height, width: keyWindow.frame.width, height: 5)
    likesContainerView = UIView(frame: containerFrame)
    likesContainerView?.backgroundColor = UIColor.red
    keyWindow.addSubview(likesContainerView!)

    //likes view controller
    let vc = UIStoryboard(name: "Main", bundle: nil).instantiateViewController(withIdentifier: "likesVC") as! likeViewController
    vc.view.frame = (likesContainerView?.frame)!
    self.addChildViewController(vc)
    likesContainerView?.addSubview(vc.view) //crashes here!!
    vc.didMove(toParentViewController: self)


    UIView.animate(withDuration: 0.5, delay: 0, usingSpringWithDamping: 1, initialSpringVelocity: 1, options: .curveEaseOut, animations: {
        likesContainerView?.frame = CGRect(x: 0, y:10, width: keyWindow.frame.width, height:500)

    }) { (_) in

    }
}

1 Ответ

0 голосов
/ 04 января 2019

Когда вы просматриваете содержимое контроллера (addChild, addSubview, didMove), вся идея состоит в том, чтобы добавить его как подпредставление представления в существующем контроллере представления. Цель этих вызовов - обеспечить синхронизацию иерархии представлений с иерархией контроллера представлений.

Но вы добавляете vc.view как подпредставление likesContainerView, которое вы добавили как подпредставление keyWindow. Вся идея в том, что представление контроллера представления может иметь подпредставление, управляемое другим контроллером представления.

Ваш self, очевидно, ссылается на контроллер представления, поэтому, если вы выполняете сдерживание контроллера представления, вы должны добавить vc.view как subview текущего view, а не непосредственно к keyWindow.

...