iOS - 设置'rootViewController'仅在设备上显示黑屏

时间:2017-04-17 05:45:59

标签: ios swift

使用非常基本的单一视图应用程序,我删除了主故事板文件并删除了对它的任何引用。因此我以编程方式设置窗口rootViewController。但是,虽然这会在模拟器中正确显示单个视图(包含标签),但在设备上运行时会显示黑屏。这是该应用程序的唯一代码。

@UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate {

    var window: UIWindow?


    func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
        window = UIWindow(frame: UIScreen.main.bounds)
        window?.rootViewController = DummyViewController()
        window?.makeKeyAndVisible()
        return true
    }

我已从info.plist文件中删除了主故事板的条目,以及常规设置中的“主界面”条目。

我正在使用Swift 3并定位iOS 8设备。我正在使用XCode 8.3.1。

控制台中没有输出,也没有例外。 viewDidLoad函数甚至在断点上触发,因此代码路径似乎正在正确运行。

有什么想法吗?

根据请求,这是DummyViewController的裸骨代码。

class DummyViewController: UIViewController {
    override func viewDidLoad() {
        super.viewDidLoad()
    }
}

一般设置显示没有对主界面的引用 enter image description here

以下是链接到DummyViewController的.xib的图像 enter image description here

**解决这种情况的解决方案是手动指定.xib加载DummyViewController **

4 个答案:

答案 0 :(得分:3)

看起来ViewController未设置为显示任何内容。除非您使用的是xib(在这种情况下,您需要以不同的方式加载视图控制器,请参阅下文),否则没有任何描述ViewController视图应如何呈现。

要对此进行测试,您可以将行self.view.backgroundColor = UIColor.red添加到ViewController的viewDidLoad()方法,然后在设备上再次运行 - 如果背景颜色变为红色,那么万岁!下一步将以编程方式添加UILabel。

从XIB加载UIViewController

let vc = MyViewController(nibName: "xibname", bundle: nil)

或者,您可以通过在MyViewController

中添加自定义init来屏蔽加载
class MyViewController: UIViewController {
    required init() {
        super.init(nibName: "xibname", bundle: nil)
    }
}

(感谢zonily-jame添加隐藏在课程中的内容)

答案 1 :(得分:2)

func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {

         let mainStoryboardIpad : UIStoryboard = UIStoryboard(name: "Main", bundle: nil)
         let loginView : BaseClassVC = mainStoryboardIpad.instantiateViewControllerWithIdentifier("BaseClassVC") as BaseClassVC
            let navigationController = UINavigationController(rootViewController: loginView)

         self.window = UIWindow(frame: UIScreen.mainScreen().bounds)
         self.window?.rootViewController = navigationController
         self.window?.makeKeyAndVisible()

         return true
    }

答案 2 :(得分:1)

将您的窗口根更改为并设置颜色

let viewController:DummyViewController = DummyViewController()
self.window?.backgroundColor = UIColor.white
self.window?.rootViewController = viewController

并更改您的控制器

  override func viewDidLoad() {
    self.view.backgroundColor = UIColor.white
  }

答案 3 :(得分:0)

您只需要初始化 viewcontroller 对象并为其实例实现白色背景色。

var window: UIWindow?

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {

    window = UIWindow(frame: UIScreen.main.bounds)
    //Add below 2 lines
    let vc = DummyViewController()
    vc.view.backgroundColor = .white

    window?.rootViewController = vc
    window?.makeKeyAndVisible()
    return true
}