SwiftUI - 如何让应用程序不显示默认的 LaunchScreen/SplashScreen?

SwiftUI - How to make app don't show default LaunchScreen/ SplashScreen?

我正在开发一个 SwiftUI 应用程序,我在那里添加了一个自定义启动画面,但现在我的应用程序显示了 2 个启动画面,一个是空白的(默认的)另一个是我创建的。

如何将设置的应用程序设置为从我的主视图启动应用程序。

在 swift5 中,在故事板视图中我们可以在这里设置 如何在 swiftUI 中实现相同的功能?

实际上我不想永久删除启动画面,我想在没有任何视频控制器的情况下放置我自己的自定义启动画面显示动画视频.. 例如播放、暂停..等

编辑 1: 添加与 SwiftUI 相同的行为

以下是 SwiftUI 的当前行为:,它没有显示 select...

的任何选项

编辑 2: 添加项目导航器屏幕截图

您可以在 Info.plist -> Launch Screen

中设置

首先,在项目导航器中删除不需要的启动屏幕。那么:

  1. Select 您想要的启动屏幕,然后在属性检查器中选中“用作启动屏幕”

  1. 确保启动屏幕的唯一视图控制器是初始视图控制器

  1. In swift5, in storyboard view we can set this here

UIKit 和 SwiftUI 都是一样的。要设置启动屏幕,只需 select 为“启动屏幕文件”。

使用 App 生命周期创建 SwiftUI 应用程序后,然后按照上述步骤操作,这是我的结果:

iOS 不允许用户删除启动画面。这是出于安全和编目原因。在 Info.plist 中删除它实际上并没有为 public 用户删除它。使用默认排列而不是创建自己的排列。

如果您提交应用程序,如果没有使用适当的启动画面,它将被拒绝。

https://developer.apple.com/forums/thread/28332

在我的例子中,我想使用自定义 Lottie 动画,然后移动到我的视图,我创建了这个视图来托管我的启动画面,并在播放完成后过渡到我的应用程序的主屏幕

struct Splash<Splash: View, Content: View>: View {

    var splashDuration: CGFloat = <#Duration#>
    @State var showingSplash: Bool = true

    var splash: Splash
    var content: Content

    init(@ViewBuilder splash: () -> Splash,
         @ViewBuilder content: () -> Content) {
        self.splashDuration = splashDuration
        self.splash = splash()
        self.content = content()
    }

    var body: some View {
        if showingSplash {
            splash
                .onAppear { scheduleHideSplash() }
                .transition(.opacity.animation(.default))
        } else {
            content
                .transition(.opacity.animation(.default))
        }
    }

    func scheduleHideSplash() {
        DispatchQueue.main
            .asyncAfter(deadline: .now() + splashDuration) {
            showingSplash = false
        }
    }
}

用法:

    Splash {
        SplashAnimationView()
    } content: {
        Color.blue.ignoresSafeArea()
    }