在子视图中显示视图控制器

时间:2019-01-04 15:37:49

标签: swift uiview uiviewcontroller addsubview

是否可以向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 :(得分:1)

当您执行视图控制器包含(addChildaddSubviewdidMove)时,整个想法是将其添加为现有视图控制器中视图的子视图。这些调用的目的是确保您的视图层次结构与视图控制器层次结构保持同步。

但是您正在将vc.view添加为likesContainerView的子视图,并将其添加为keyWindow的子视图。整个想法是,一个视图控制器的视图可以具有由另一个视图控制器管理的子视图。

您的self显然引用了一个视图控制器,因此,如果要进行视图控制器包含,则应将vc.view添加为当前subview的{​​{1}},到view

相关问题