Xcode:LaunchScreen.storyboard未显示出来

4
我是一个有用的助手,可以为您翻译文本。

我正在尝试设置我的应用程序的启动屏幕和初始视图。然而,我无法让任何一个显示出来。

我已经设置了如下内容:

enter image description here

enter image description here

我是否漏掉了一步?我不应该看到一个带有“blah”的页面作为启动屏幕吗?相反,当我运行模拟器时,它只是黑色的。

另外,我也不明白为什么我的初始视图也没有显示出来。

在我的AppDelegate.swift文件中:

import UIKit

@UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate {

  var window: UIWindow?

  func application(application: UIApplication,
      didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
        self.window?.rootViewController = self.rootViewController()
    return true
  }

  private func rootViewController() -> UIViewController {
    return MapViewController.init()
  }

}

我的MapViewController.swift文件:

import UIKit

class MapViewController: UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()
        var label = UILabel(frame: CGRectMake(0, 0, 200, 21))
        label.center = CGPointMake(160, 284)
        label.textAlignment = NSTextAlignment.Center
        label.text = "I am a test label"
        self.view.addSubview(label)
        NSLog("heyyyy!!") // <----------------- doesn't get printed either, so I think I'm missing something again...
    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }


    /*
    // MARK: - Navigation

    // In a storyboard-based application, you will often want to do a little preparation before navigation
    override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
        // Get the new view controller using segue.destinationViewController.
        // Pass the selected object to the new view controller.
    }
    */

}

抱歉,这些问题有点初学者的问题。
== 更新 ==
构建时我确实收到了这两个警告:
file:///Users/emai/Documents/ios/Sherpa/SherpaNewYork/LaunchScreen.storyboard: 警告:不支持的配置:由于缺少入口点而无法访问场景,并且没有标识符可通过-instantiateViewControllerWithIdentifier:进行运行时访问。
/Users/emai/Documents/ios/Sherpa/SherpaNewYork/LaunchScreen.storyboard:9:由于缺少入口点而无法访问场景,并且没有标识符可通过-instantiateViewControllerWithIdentifier:进行运行时访问。

当您构建时,是否有关于启动屏幕的任何警告? - rmaddy
是的,让我为您粘贴它。 - bigpotato
2
不要忽略警告。修复所有警告。一个应用程序真的应该(必须)无警告编译。 - rmaddy
有道理...我已经更新了问题并附上了警告。 - bigpotato
不是“必须”的问题。在一个复杂的项目中(尤其是在现实世界的时间限制下),管理所有警告是完全不切实际的,特别是涉及到约束问题时。 - drew..
Nate的下面的回答是唯一解决我的问题的方法:他建议我们在终端中使用“xcrun simctl erase all”来清除模拟器缓存。 - drew..
10个回答

12

我之前也遇到了一个启动屏的故事板没有显示出来的问题。我尝试了所有可以找到的修复方法,但都没有用。然后我清除了模拟器上的缓存,问题就解决了!原来是一个模拟器的问题。我使用终端中的以下命令清除了缓存:xcrun simctl erase all


1
这就是答案。谢谢你。这是一个非常愚蠢的错误,也很烦人。这是唯一能最终解决启动屏幕故事板未显示的问题的方法。 - drew..
提醒一下,如果你的电脑上安装了多个 Xcode 版本,就不要使用这个终端命令。否则会导致模拟器连接丢失并引发更多问题。 - itsmcgh
是的,这也是我的答案...我都快生气了! - Nerdy Bunz
谢谢您提到模拟器。我运行了多个Xcode版本,因此在重新运行之前从模拟器中删除应用程序解决了我的问题。 - Marcy
这对我来说是有效的,使用的是Xcode 11.2.1和SwiftUI模板。 - EightyEight

3

看起来你还没有设置入口点。将你想要显示的第一个场景设置为Initial View Controller

enter image description here


太棒了,这解决了第一个场景的问题对吧?如果我不使用storyboard来设置场景,我应该如何通过编程方式设置此属性? - bigpotato
如果您没有使用故事板,则无需设置任何内容,因为您需要手动加载视图控制器。 - Abizern
那为什么只有黑屏?是因为我搞砸了启动屏幕部分吗? - bigpotato
可能是因为你将根视图控制器设置为普通的UIViewController。尝试返回你想要返回的视图控制器的实例。 - Abizern
哎呀,那只是我在调试黑屏时的一个测试。将其改回MapViewController.init()并没有什么作用。 - bigpotato

2
当然,这个答案有点晚。;-) 我也遇到了同样的问题,但偶然发现了一个非常简单的解决方案,就是使用应用程序自动创建的启动屏.storyboard。
打开应用程序设置,然后选择应用程序图标和启动图片。

enter image description here

在下拉列表中选择Launch Screen.storyboard,即使您认为已经选择了它。选择后屏幕的显示不会改变。但是,在重新启动项目后,启动屏幕将被显示! 顺便说一句,要测试这个整洁,您可以在以下代码的最后一行设置一个断点: func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?)

1

在尝试了其他所有答案之后,我最终删除了LaunchScreen.Storyboard文件并创建了一个新的。这是唯一修复我的问题的方法。


1
这解决了我的问题。谢谢。 - Silvering

1

我也曾遇到启动画面的问题。正如Abizern所提到的,不允许有ViewController。如果你只删除了一个ViewController可能还不够。启动画面文件仍然可能与不再可用的ViewController有一些连接。这也是一个问题。

我的解决方法:

  1. 删除启动画面的ViewController
  2. 在LaunchScreen.storyboard中删除连接
  3. 从设备中删除应用程序
  4. 重新安装

-> 成功 :)


0
你所忽略的是启动屏幕是静态的!它不需要控制器或任何东西。控制器将无法起作用。对于启动屏幕,您只能使用界面构建器设计UI,而不能通过代码实现。
如果您尝试在启动屏幕视图上设置自定义控制器,Xcode通常会告诉您这会导致错误。

我应该从那个故事板中删除视图控制器,只留下一个独立的故事板吗?Xcode 会管理它吗? - bigpotato
@Edmund 你需要一个静态的启动屏幕故事板,以及一个应用程序故事板,在其中将视图连接到控制器和输出口等所有疯狂的东西。 - luk2302

0

因此,删除LaunchScreen.storyboard + LaunchScreenViewController.swift文件并添加一个Launch Screen.xib文件可以修复启动屏幕。这对我来说很有意义,因为启动屏幕应该是静态的,不应使用代码。

然而,在启动屏幕之后,视图仍然是黑色的。我会为此提出另一个SO问题。


1
不需要LaunchScreenViewController。它没有被使用。启动屏幕的故事板只能包含您放置在其中的对象和布局约束。不执行任何代码。一个简单的启动故事板就足够了。我怀疑你的问题在别处,你只是通过从故事板移动到xib来解决它。 - Abizern

0
最简单的解决方案是在模拟器中测试时卸载并重新安装应用程序。无需删除和重新创建LaunchScreen.Storyboard

0
在我的情况下,项目导航器文件过滤器被设置为“最近”。请参见Xcode左下角。我取消了最近的选择,然后文件就出现了。

0

我知道现在已经很晚了,但我想分享一下我是如何解决这个问题的。如果你正在真机上测试,请先删除应用程序,重启手机,然后重新安装应用程序。如果你已经按照所有步骤进行操作,例如清除缓存和目标设置中的常规选项卡等,则问题将得到解决。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接