2017-03-31 4 views
1

Ich möchte einen UIViewController in eine UIView einbetten. Ich möchte das programmatisch erstellen. Ich habe den UIViewController im Storyboard erstellt.UIViewController in eine UIView einbetten

Mein Code eine leere UIView zu erstellen:

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) 

und der Code der UIViewController zu der Ansicht anzuhängen:

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

Dadurch wird die Ansicht in meinem UIView zeigt, aber nicht an der richtigen Weg. Die UIView ist in diesem Fall 512 Pixel breit. Während der (eingebettete) UIViewcontroller denkt, dass er 1024 Pixel breit ist (die volle Bildschirmbreite).

Wie kann ich es beheben, dass die eingebettete Ansicht die Breite und Höhe von seinem übergeordneten (UIView) bekommt?

+0

Was Sie tun, ist völlig falsch. Sie können auf diese Weise nicht einfach die View-Controller-Ansicht zu Ihrer Schnittstelle hinzufügen. (Was die Größe betrifft, liegt es an Ihnen, einen 'Rahmen' für die hinzugefügte Ansicht zu erstellen. Aber Ihre Ansicht wird auf keinen Fall korrekt funktionieren.) – matt

+0

@matt Was ist eine gute Methode, dies zu tun? – da1lbi3

Antwort

6

Wie andere sagten, können Sie die Ansicht eines Viewcontrollers nicht in eine Ansicht einbetten. Sie können einen Viewcontroller in einen anderen Viewcontroller als Childviewcontroller einbetten.

Versuchen Sie NewView Code ersetzen mit:

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) 

EDIT: zu ändern, wie und wo die childviewcontroller erscheint, einfach aktualisieren Rahmen ist. zum Beispiel, um es zur halben Höhe und verankert an der Unterseite:

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

Aber wie kann ich den neuen View Controller an einer bestimmten Position hinzufügen? Zum Beispiel nur auf der Hälfte des Bildschirms? – da1lbi3

+0

@ da1lbi3 Sie können den Ursprung und die Größe ändern, indem Sie den Rahmen aktualisieren. Siehe meine bearbeitete Antwort – ahbou

Verwandte Themen