【问题标题】:SwiftUI - How to make app don't show default LaunchScreen/ SplashScreen?SwiftUI - 如何使应用程序不显示默认的 LaunchScreen/SplashScreen?
【发布时间】:2021-06-14 19:43:19
【问题描述】:

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

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

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

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

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

以下是 SwiftUI: 的当前行为,它没有显示任何选择选项...

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

【问题讨论】:

  • 您使用哪个LifeCycleUIKit App DelegateSwiftUI
  • SwiftUI 生命周期

标签: swiftui splash-screen main


【解决方案1】:

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

  1. 选择所需的启动屏幕,然后在属性检查器中选中“用作启动屏幕”

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

  1. 在 swift5 中,在故事板视图中,我们可以在此处进行设置

UIKit 和 SwiftUI 都是一样的。要设置启动屏幕,只需在“启动屏幕文件”中选择它即可。

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

【讨论】:

  • 谢谢 Aheze,但问题是您提到的第 3 步不仅会在 Swift UI 2.0 和 XCode 12.5 中显示。更新了问题,请看看...跨度>
  • @hafiza 我也在使用 SwiftUI 2.0 和 Xcode 12.5,所以这很奇怪......你能显示你的 Project Navigator 的屏幕截图吗?
  • @hazifa 我没有看到 .storyboard 文件...启动屏幕需要是 .storyboards。您不能将 mp4 设置为启动屏幕。
  • 我没有使用 .mp4 作为启动画面。我希望在启动画面上播放此视频。
  • 我没有使用storyboard生命周期,我使用的是swiftUI生命周期
【解决方案2】:

您可以在Info.plist 中设置这个 -> Launch Screen

【讨论】:

  • 我也已经尝试从这里删除启动屏幕,它不起作用。
  • @hafiza 如果您已经删除了默认启动屏幕,但它仍然是一个问题,也许干净的构建文件夹(cmd+shift+k)可以帮助解决这个问题。如果问题仍然存在,希望其他人能解答。
【解决方案3】:

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

如果您提交应用程序,它将被拒绝,而无需使用适当的初始屏幕。

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

【讨论】:

  • 我不想完全删除启动画面我想放上我自己的自定义启动画面...
【解决方案4】:

在我的例子中,我想使用自定义 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()
    }

【讨论】:

    猜你喜欢
    • 2014-03-18
    • 1970-01-01
    • 2012-09-21
    • 2020-04-05
    • 2014-06-12
    • 1970-01-01
    • 2012-04-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多