Instantiate UIViewController programmatically without nib
You'll need to setup your views in the loadView
method of UIViewController
and assign your root view to the view
property.
See https://developer.apple.com/library/ios/documentation/UIKit/Reference/UIViewController_Class/#//apple_ref/occ/instm/UIViewController/loadView for additional details.
According to the docs:
If the view controller does not have an associated nib file, this method creates a plain UIView object instead.
https://developer.apple.com/library/ios/documentation/UIKit/Reference/UIViewController_Class/#//apple_ref/occ/instp/UIViewController/view
If you do not provide a nib file when instantiating the view controller, UIViewController calls it's loadView()
method which creates a plain UIView object and assigns it to its view property.
The reason why you are seeing a transparent view is because the UIView object has no background color. To verify this, you can set the background color of the view controller's view property right before you push it on your navigation stack.
let viewController = TestViewController()
viewController.view.backgroundColor = .blueColor()
navigationController?.pushViewController(viewController, animated: true)