簡體   English   中英

iOS - 設置“rootViewController”只會在設備上導致黑屏

[英]iOS - Setting 'rootViewController' results in black screen on device only

對於一個非常基本的單視圖應用程序,我刪除了主故事板文件並刪除了對它的任何引用。 因此,我正在以編程方式設置窗口 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 文件中刪除了 Main storyboard 的條目,以及常規設置中的“主界面”條目。

我正在使用 Swift 3 並針對 iOS 8 設備。 我正在使用 XCode 8.3.1。

控制台沒有輸出,也沒有異常。 viewDidLoad 函數甚至在斷點處觸發,因此代碼路徑似乎運行正確。

有任何想法嗎?

這是應要求提供的 DummyViewController 的基本代碼。

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

顯示不參考主界面的一般設置在此處輸入圖片說明

這是鏈接到 DummyViewController 的 .xib 的圖像在此處輸入圖片說明

** 解決這種情況的解決方案是手動指定要為 DummyViewController 加載的 .xib **

看起來 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在課堂上添加隱藏它)

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
    }

將您的窗口根更改為並設置顏色

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

並更改您的控制器

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

您只需要初始化 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
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM