From ef9a671b621267da077f06b08035a8bbcc16a628 Mon Sep 17 00:00:00 2001 From: dadachi Date: Sun, 3 May 2026 15:46:37 +0900 Subject: [PATCH] Add welcome header to Onboarding screen Co-Authored-By: Claude Opus 4.7 (1M context) --- NativeAppTemplate/Constants.swift | 4 +++ .../UI/App Root/OnboardingView.swift | 26 +++++++++++++++++++ 2 files changed, 30 insertions(+) diff --git a/NativeAppTemplate/Constants.swift b/NativeAppTemplate/Constants.swift index 3de608c..89e7195 100644 --- a/NativeAppTemplate/Constants.swift +++ b/NativeAppTemplate/Constants.swift @@ -285,6 +285,10 @@ enum Strings { static let email = "Email" static let password = "Password" + static var welcomeToApp: String { + "Welcome to \(Bundle.main.displayName)" + } + static let onboardingDescription1 = "Onboarding description 1." static let onboardingDescription2 = "Onboarding description 2." static let onboardingDescription3 = "Onboarding description 3." diff --git a/NativeAppTemplate/UI/App Root/OnboardingView.swift b/NativeAppTemplate/UI/App Root/OnboardingView.swift index 16185aa..011f8ea 100644 --- a/NativeAppTemplate/UI/App Root/OnboardingView.swift +++ b/NativeAppTemplate/UI/App Root/OnboardingView.swift @@ -26,6 +26,7 @@ private extension OnboardingView { @ViewBuilder var contentView: some View { VStack { SwiftUI.TabView { + welcomePage ForEach(viewModel.onboardings) { onboarding in let id = onboarding.id page( @@ -60,6 +61,31 @@ private extension OnboardingView { .frame(width: 256, height: 24) } + private var welcomePage: some View { + ZStack(alignment: .bottom) { + Image("hero") + .resizable() + .aspectRatio(contentMode: .fit) + .padding(.top, NativeAppTemplateConstants.Spacing.md) + .padding(.bottom, 192) + + ZStack(alignment: .top) { + VStack { + Text(Strings.welcomeToApp) + .font(.largeTitle) + .fontWeight(.bold) + .multilineTextAlignment(.center) + .dynamicTypeSize(DynamicTypeSize.accessibility1) + .padding([.top, .horizontal]) + .accessibilityIdentifier("OnboardingView_welcome_staticText") + } + .background(Color.backgroundColor) + .frame(maxWidth: .infinity, maxHeight: 192, alignment: .top) + } + .background(Color.backgroundColor) + } + } + private func page(image: String, text: String, imageOrientation: ImageOrientation) -> some View { ZStack(alignment: .bottom) { Image(image)