Xcode 11 & iOS13,使用 UIKIT 无法改变 UIViewController 的背景颜色

Bla*_*dan 1 uiviewcontroller swift ios13 xcode11

因此,我在 Xcode11 中创建了一个新项目,将 AppDelegate 设置为我的新 VC,并将 xxx 场景委托中的代码注释为没有 UIKit 部分:

    func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
        // Override point for customization after application launch.
        window = UIWindow()
        window?.makeKeyAndVisible()
        let controller = MainVC()
        window?.rootViewController = controller
        return true
    }
Run Code Online (Sandbox Code Playgroud)

在我的 UIViewController 中,我想设置背景颜色,

import UIKit

class MainVC : UIViewController {
    override func viewDidLoad() {
        view.backgroundColor = .red
        self.view.backgroundColor = .blue
        print("main Screen showing")
        ConfigureUI()
        setupUI()

    }
Run Code Online (Sandbox Code Playgroud)

但结果是模拟器中的黑屏。甚至从其他项目中获取代码也无济于事……我之前在其他 Xcode 版本中已经这样做过,应该可以工作。有任何想法吗?

PS:App进入ViewController,可以在控制台打印,但是黑屏。

mat*_*att 8

并注释 xxx 场景委托中的代码没有 UIKit 部分

你不应该那样做。它是你的代码,需要在正确的地方去。如果你在 Xcode 11 中创建一个新项目,这段代码什么都不做:

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
    // Override point for customization after application launch.
    window = UIWindow()
    window?.makeKeyAndVisible()
    let controller = MainVC()
    window?.rootViewController = controller
    return true
}
Run Code Online (Sandbox Code Playgroud)

代码运行,但 window 属性不是您的应用程序的窗口,因此您所做的事情毫无意义。该窗口现在属于场景委托。这就是您需要创建窗口并设置其根视图控制器的地方。

func scene(_ scene: UIScene, 
    willConnectTo session: UISceneSession, 
    options connectionOptions: UIScene.ConnectionOptions) {
        if let windowScene = scene as? UIWindowScene {
            self.window = UIWindow(windowScene: windowScene) 
            let vc = MainVC()                                  
            self.window!.rootViewController = vc             
            self.window!.makeKeyAndVisible()                 
        }
}
Run Code Online (Sandbox Code Playgroud)