2017-03-28 4 views
0

Wenn App gestartet wird, verwende ich diese Methode, um den Stammansicht-Controller festzulegen.swift subview füllt die Elternansicht nicht vollständig

func showRootViewController() { 
    let sb = UIStoryboard.init(name: "Main", bundle: nil) 
    let mainViewController = sb.instantiateInitialViewController()! 
    self.window?.rootViewController = mainViewController 
    self.window?.makeKeyAndVisible() 
} 

Im Haupt View-Controller, I-Code haben den Blick auf Container Ansicht

class MainViewController: UIViewController { 

    @IBOutlet weak var headerView: UIView! 
    @IBOutlet weak var containerView: UIView! 

    override func viewDidLoad() { 
     super.viewDidLoad() 

      } 

    override func viewDidAppear(_ animated: Bool) { 
     super.viewDidAppear(animated) 

     if(userManager.hasRegistered()) { 
      let sb = UIStoryboard.init(name: "Login", bundle: nil) 
      self.setContentViewController(sb.instantiateInitialViewController()!) 
     } else { 
      let sb = UIStoryboard.init(name: "Registration", bundle: nil) 
      self.setContentViewController(sb.instantiateInitialViewController()!) 
     } 

    } 

    func setContentViewController(_ contentViewController: UIViewController) { 
     print(self.containerView.frame) 
     let contentView = contentViewController.view! 
     contentView.frame = self.containerView.bounds 
     self.containerView.addSubview(contentView) 
    } 
} 

Let Blick auf die Ansicht zu setzen, ich habe Behälter Ansicht, was verwendet wird Subviews hinzuzufügen. Ich habe den Hintergrund jeder zu helfen, den Rahmen der Containeransicht Adresse
main view

Die subview ausgelegt ist wie folgt:
result design

Das Ergebnis ist nicht so meine erwartet. ContainerView ist irgendwo hingegangen (ich weiß es wirklich nicht), die Subview ist auf der Oberseite. result view

Bitte helfen Sie mir.

Antwort

1

Der contentView-Rahmen ist an der falschen Position gesetzt. Sie sollten diese Zeile Code verschieben:

contentView.frame = self.containerView.bounds 

in

override func func viewDidLayoutSubviews() { 
    super.viewDidLayoutSubviews() 
    contentView.frame = self.containerView.bounds 
} 
+0

das Ergebnis immer noch gleich ist. viewDidLayoutSubviews wird sogar vor viewDidAppear ausgeführt. – duykaka

+0

versuchen, dies zu lesen: https://developer.apple.com/library/content/featuredarticles/ViewControllerPGforiPhoneOS/ImplementingaContainerViewController.html – iGenio

+0

Vielen Dank @iGeno. Der Schlüssel fehlt Add-Child-View-Controller. – duykaka

Verwandte Themen