SwiftUI Onboarding & Welcome Screens
Apple-style welcome flows, swipeable TabView carousels, and dark-mode immersive welcome screens. (3 components available in Compot).
1 of 3Free ComponentiOS 16.0+
Basic Welcome Screen
Classic Apple-style welcome screen with hero icon, 3 feature bullet rows, and bottom CTA button.
BasicWelcomeScreen.swift
import SwiftUI
struct BasicWelcomeScreen: View {
var body: some View {
NavigationStack {
VStack {
Image(uiImage: UIImage(named: AppIconProvider.appIcon()) ?? UIImage())
.resizable()
.scaledToFit()
.frame(width: 120, height: 120)
.clipShape(.rect(cornerRadius: 22))
.shadow(color: .gray.opacity(0.6), radius: 1)
.padding(.bottom)
VStack(alignment: .center, spacing: 8) {
Text("Welcome to Compot")
.font(.title)
.fontWeight(.semibold)
.foregroundStyle(.primary)
.frame(maxWidth: 350)
Text("The sweetest app for busy SwiftUI developers.")
.font(.title3)
.fontWeight(.regular)
.foregroundStyle(.primary)
.multilineTextAlignment(.center)
.frame(maxWidth: 250)
}
}
.padding()
}
.safeAreaInset(edge: .bottom) {
Button {
print("get started")
} label: {
HStack(spacing: 8) {
Text("Get Started")
Image(systemName: "arrow.right")
}
.padding()
.font(.headline)
.foregroundStyle(.white)
.frame(alignment: .center)
}
.frame(maxWidth: 450)
.background(.tint)
.clipShape(Capsule())
.padding()
.help("Accessibility hint, eg. Button to start to use the app.")
}
}
}
#Preview {
BasicWelcomeScreen()
}
enum AppIconProvider {
static func appIcon(in bundle: Bundle = .main) -> String {
guard let icons = bundle.object(forInfoDictionaryKey: "CFBundleIcons") as? [String: Any],
let primaryIcon = icons["CFBundlePrimaryIcon"] as? [String: Any],
let iconFiles = primaryIcon["CFBundleIconFiles"] as? [String],
let iconFileName = iconFiles.last else {
fatalError("Couldn't find icon in the bundle.")
}
return iconFileName
}
}2 of 3Free ComponentiOS 16.0+
Onboarding TabView Basic
Multi-page swipeable onboarding carousel with page dots and persistent "Continue" button.
OnboardingTabviewBasic.swift
import SwiftUI
struct OnboardingTabViewBasic: View {
let blueish: Color = Color(red: 0.42, green: 0.4, blue: 0.84)
let pinkish: Color = Color(red: 0.92, green: 0.43, blue: 0.43)
var body: some View {
TabView {
OnboardingTabViewBasicSlide(iconName: "swift", title: "SwiftUI Components", subtitle: "Choose from 100+ components and templates.")
OnboardingTabViewBasicSlide(iconName: "doc.on.doc", title: "Copy & Share", subtitle: "Second slide subtitle")
OnboardingTabViewBasicSlide(iconName: "globe", title: "Third slide title", subtitle: "Third slide subtitle")
}
.background(Gradient(colors: [blueish, pinkish]))
.tabViewStyle(.page)
.safeAreaInset(edge: .bottom) {
OnboardingTabViewBasicButton(label: "Get Started") {
print("get started")
}
}
}
}
#Preview {
OnboardingTabViewBasic()
}
struct OnboardingTabViewBasicSlide: View {
let iconName: String
let title: String
let subtitle: String
var body: some View {
VStack(alignment: .center) {
Image(systemName: iconName)
.resizable()
.scaledToFit()
.frame(width: 120, height: 120)
.clipShape(.rect(cornerRadius: 22))
.shadow(color: .gray.opacity(0.6), radius: 1)
.padding(.bottom)
VStack(alignment: .center, spacing: 8) {
Text(title)
.font(.title)
.fontWeight(.semibold)
.foregroundStyle(.primary)
.frame(maxWidth: 350)
Text(subtitle)
.font(.title3)
.fontWeight(.regular)
.foregroundStyle(.primary)
.multilineTextAlignment(.center)
.frame(maxWidth: 350)
}
}
.padding()
}
}
struct OnboardingTabViewBasicButton: View {
let label: String
let action: () -> Void
var body: some View {
Button {
action()
} label: {
HStack(spacing: 8) {
Text(label)
}
.padding()
.font(.headline)
.foregroundStyle(.white)
.frame(alignment: .center)
}
.frame(maxWidth: 450)
.background(.tint)
.clipShape(Capsule())
.padding()
.help("Accessibility hint, eg. Button to start to use the app.")
}
}3 of 3Pro ComponentiOS 16.0+
Sports Car App Welcome Screen
Immersive dark-mode onboarding screen with background media and bold typographic accents.
SportsCarAppWelcomeScreen.swiftPro
// You can ownload the car image here: https://drive.google.com/file/d/1GVdHPmkFmwQ1-DAh2k6kUv1HVDk0toIA/view?usp=sharing
import SwiftUI
struct SportCarAppWelcomeScreen: View {
let carColor: Color = Color(red: 0.88, green: 0.0, blue: 0.1)
// ...
// Complete source code available in Compot Pro on the App Store.Compot Pro Component
Unlock full code & interactive preview
Interactive live preview and complete SwiftUI code available in the Compot App.
Available for macOS & iOS • 85+ free components included
Explore other SwiftUI categories
Buttons (34)Texts & Typography (18)Banners & Promos (10)Cards & Content Displays (8)Settings, Lists & Rows (9)Avatars & User Profiles (7)Charts & Gauges (5)Icons & Badges (7)Links & Sharing (5)Navigation Links & Banners (3)Paywalls & Subscriptions (3)Images & Effects (3)Labels (4)SF Symbols & Animations (4)Inputs & Text Editors (2)Shapes, Chat & Real-Time (2)Tiles & Selectables (2)Badges & Pills (1)Alerts & Modals (1)Toasts & Feedback (1)Developer Templates & Architecture (3)