是否可以向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
}
}
答案 0 :(得分:1)
当您执行视图控制器包含(addChild
,addSubview
,didMove
)时,整个想法是将其添加为现有视图控制器中视图的子视图。这些调用的目的是确保您的视图层次结构与视图控制器层次结构保持同步。
但是您正在将vc.view
添加为likesContainerView
的子视图,并将其添加为keyWindow
的子视图。整个想法是,一个视图控制器的视图可以具有由另一个视图控制器管理的子视图。
您的self
显然引用了一个视图控制器,因此,如果要进行视图控制器包含,则应将vc.view
添加为当前subview
的{{1}},到view
。