当前位置: 首页 > 面试题库 >

为什么手动设置的根视图控制器显示黑屏?

云育
2023-03-14
问题内容

我已经使用Xcode 11,Beta 5为iOS
13手动设置了根视图控制器。在部署信息中删除了对main的引用,包括在info.plist中删除了对main的引用,而我从未发现自己必须在iOS
13之前做。窗口在SceneDelegate中完成,嵌套在willConnectTo函数中。通常,如果我错过了某个步骤,该应用程序将崩溃。现在,我得到了一个空白的黑屏,而不是看到我的视图控制器设置为红色背景。所有这些功能都可以在Beta
5之前使用。

执行了擦除模拟器上的所有内容和设置的操作。清除了构建文件夹,并已在物理设备上运行了该应用程序。也已使用另一台Xcode 11 beta
5的计算机。所有结果均显示在相同的黑屏上。我想念什么?

这是我在willConnectTo函数中嵌套的SceneDelegate文件中的根视图控制器的手动设置:

let viewCon = ViewController()
window = UIWindow(frame: UIScreen.main.bounds)
window?.rootViewController = viewCon
window?.makeKeyAndVisible()

问题答案:

为了确保在以编程方式完成所有操作后都能在iOS 13中看到根视图控制器,您必须执行以下操作:

在场景委托中,必须创建窗口实例和根视图控制器:

class SceneDelegate: UIResponder, UIWindowSceneDelegate {
    var window: UIWindow?

    func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions) {
        guard let winScene = (scene as? UIWindowScene) else { return }

        // Create the root view controller as needed
        let vc = ViewController()
        let nc = UINavigationController(rootViewController: vc)

        // Create the window. Be sure to use this initializer and not the frame one.
        let win = UIWindow(windowScene: winScene) 
        win.rootViewController = nc
        win.makeKeyAndVisible()
        window = win
    }
}

您的Info.plist必须具有“应用程序场景清单”条目。它下面应是“启用多个Windows”条目。根据您的应用设置为是或否。(可选)您还应该具有“场景配置”条目。

当您在目标的“常规”选项卡上选中“支持多个窗口”设置时,所有这些条目均由Xcode添加。这将默认将“启用多个窗口”(Enable Multiple
Windows)条目设置为“是”(YES),因此,如果您需要场景但不需要多个窗口,则可以将其更改为“否”。



 类似资料:
  • 这是的定义: 策略-定义了一系列算法,封装了每一个,并使它们可以互换。策略允许算法独立于使用它的客户端而变化。 所以,策略将功能分为两部分:一部分不会更改,另一部分在将来某个时间可以更改。 在MVC中,他们说: 控制器是视图的策略 这意味着控制器是变化的,视图将来可能不会改变。 我还不太明白。我认为他们两个将来都可以改变。 请给我解释一下人们为什么这么说。

  • 动画控制器视图 动画控制器视图允许你创建、查看和修改动画控制器资源。 动画控制器视图显示了一个新的空动画控制器资源 动画控制器视图主要有两部分:网格布局主体区域,左侧的分层和参数面板。 动画控制器视图的布局区域 深灰色网格部分是主体布局区域。你可以在这里创建、排列和连接 动画控制器 的状态(即动画剪辑)。 可以在网格上右键点击创建一个新的状态节点。使用鼠标中键拖动,或拖动时按住 Alt/Optio

  • 比方说,我有一个名为VC2的视图控制器类的实例。在VC2中,有一个“cancel”(取消)按钮会自动关闭。但当“取消”按钮触发时,我无法检测或接收任何回调。VC2是一个黑匣子。 视图控制器(称为VC1)将使用呈现视图控制器:动画:完成方法呈现VC2。 VC1在VC2被解除时必须检测哪些选项? 编辑:从@rory mckinnel的评论和@NicolasMiari的回答中,我尝试了以下方法: 在VC

  • 问题内容: 我需要一个根视图控制器实例。 我尝试了这些方法: 返回: null : 另外,当我尝试获取控制器数组时: 它仅返回一个控制器,但不是我的根视图控制器。 如果我尝试从导航控制器中获取: 返回: null : 有什么想法吗?我还能尝试获得根视图控制器的一个实例吗? 谢谢。 问题答案: 如果您尝试访问在appDelegate中设置的。试试这个: 目标C 迅速 迅捷3 迅捷4和4.2 雨燕5&

  • 我有一个导航视图控制器,它会在操作时向选项卡栏视图控制器发送一个序列。因此,选项卡式视图控制器继承了导航栏。我正在尝试将标题应用于连接到选项卡栏视图控制器的其中一个视图控制器,但通过代码设置标题对我不起作用。有人知道为什么会这样吗? 这是我的故事板的图片: 带有注销按钮的视图控制器是我试图在导航条(代码)中设置标题的地方: 导航控制器中嵌入的视图控制器触发到选项卡栏控制器的顺序:

  • 我找到了一些关于这个问题的帖子,但是没有一个能解决我的问题。 说像我已经... ViewControlllerA ViewControlllerB 我试图将ViewControlllerB添加为ViewControlllerA中的子视图,但是,它抛出了一个错误,如""。 下面是代码。。。 视图控制器 ViewControllerB只是一个带有标签的简单屏幕。 视图控制器B 编辑