2017-03-31 41 views
1

我想嵌入UIView内的UIViewController。我想以编程方式创建这个。我在故事板中创建了UIViewController。在UIView中嵌入UIViewController

我的代码创建一个空的UIView:

let myNewView=UIView(frame: CGRect(x: (0 + screenHeight/2), y: leftView.frame.origin.y, width: screenHeight/2, height: leftView.frame.height)) 
myNewView.backgroundColor=UIColor.lightGray 

self.view.addSubview(myNewView) 

而到了的UIViewController追加到视图代码:

let storyboard = UIStoryboard(name: "Main", bundle: nil) 
var controller: UIViewController = storyboard.instantiateViewController(withIdentifier: "testView") as UIViewController 
myNewView.addSubview(controller.view) 

这显示我UIView里面的观点,而不是在正确的办法。 UIView在这种情况下是512像素宽。而(嵌入式)UIViewcontroller认为这是1024像素宽(全屏幕宽度)。

我该如何解决它,嵌入视图从它的父(UIView)获取宽度和高度?

+0

你在做什么是完全错误的。您不能简单地以这种方式将视图控制器的视图添加到您的界面。 (至于尺寸,为增加的视图提供一个“框架”取决于你,但是在任何情况下,你的视图都不能正常工作。) – matt

+0

@matt这样做的好方法是什么? – da1lbi3

回答

6

正如其他人所说,你不能在视图内嵌入视图控制器的视图。 你可以做的是将一个viewcontroller作为一个childviewcontroller嵌入到另一个viewcontroller中。

尝试用更换您的NewView的代码:

let storyboard = UIStoryboard(name: "Main", bundle: nil) 
var controller: UIViewController = storyboard.instantiateViewController(withIdentifier: "testView") as UIViewController 

//add as a childviewcontroller 
addChildViewController(controller) 

// Add the child's View as a subview 
self.view.addSubview(controller.view) 
controller.view.frame = view.bounds 
controller.view.autoresizingMask = [.flexibleWidth, .flexibleHeight] 

// tell the childviewcontroller it's contained in it's parent 
    controller.didMove(toParentViewController: self) 

编辑: 要怎么改和childviewcontroller出现的地方,简单地更新它的框架。 例如,使其高度的一半,并锚定到底部:

controller.view.frame = CGRect(x: 0, y: view.center.y, width: view.size.width, height: view.size.height * 0.5) 
+0

但是,我怎样才能添加新的视图控制器在某个位置?例如只在屏幕的一半? – da1lbi3

+0

@ da1lbi3您可以通过更新框架来更改原点和尺寸。看到我编辑的答案 – ahbou