![](/img/trans.png)
[英]UIWindow results in a black screen when changing the 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.