struct BasicListExample: View {
var body: some View {
List {
Text("DevTechie")
Text("Learn by Doing")
Text("Check out more at www.devtechie.com")
}
}
}
struct SignupView: View {
@State private var username = ""
@State private var password = ""
@State private var email = ""
var body: some View {
NavigationView {
List {
HStack {
Spacer()
Image(systemName: "heart")
Text("DevTechie")
Image(systemName: "heart")
Spacer()
}
.font(.largeTitle)
.foregroundColor(.orange)
TextField("Username", text: $username)
SecureField("Password", text: $password)
TextField("Email", text: $email)
}
.toolbar {
ToolbarItem(placement: .primaryAction) {
Button("Sign up") {}
}
ToolbarItem(placement: .destructiveAction) {
Button("Cancel") {}
}
}
.navigationBarTitleDisplayMode(.inline)
}
}
}
struct DevTechieCourse: Identifiable {
let id = UUID()
var name: String
var type: String
}extension DevTechieCourse {
static var sample: [DevTechieCourse] {
[
DevTechieCourse(name: "Mastring SwiftUI 3", type: "Video Course"),
DevTechieCourse(name: "Build Goals app in SwiftUI 3 & Firebase", type: "Video Course"),
DevTechieCourse(name: "Disney Plus Clone in SwiftUI", type: "Video Course"),
]
}
}struct DevTechieCoursesHome: View {
var body: some View {
List(DevTechieCourse.sample) { course in
Text(course.name)
}
}
}
struct DevTechieCoursesHome: View {
var body: some View {
List(DevTechieCourse.sample) { course in
VStack(alignment: .leading) {
Text(course.name)
.font(.title)
Text(course.type)
.font(.caption)
.foregroundColor(.secondary)
}
}
}
}
struct ListWithArray: View {
let courseCategoryList = ["SwiftUI", "Swift", "Machine Learning", "UIKit", "iOS", "ARKit"] var body: some View {
List(courseCategoryList, id: \.self) { category in
Text(category)
.font(.title3)
}
}
}
struct ListWithSelection: View {
let courseCategoryList = ["SwiftUI", "Swift", "Machine Learning", "UIKit", "iOS", "ARKit"] @State private var selectedItem: String?
var body: some View {
NavigationView {
List(courseCategoryList, id: \.self, selection: $selectedItem) { category in
Text(category)
.font(.title3)
}
.navigationTitle("DevTechie")
.toolbar {
EditButton()
}
}
}
}
struct ListWithSelection2: View {
let courses = DevTechieCourse.sample
@State private var selectedItem: UUID?
var body: some View {
NavigationView {
List(courses, selection: $selectedItem) { course in
VStack(alignment: .leading) {
Text(course.name)
.font(.title)
Text(course.type)
.font(.caption)
.foregroundColor(.gray)
}
}
.navigationTitle("DevTechie")
.toolbar {
EditButton()
}
}
}
}
struct ListWithSelection2: View {
let courses = DevTechieCourse.sample
@State private var selectedItem = Set<UUID>()
var body: some View {
NavigationView {
List(courses, selection: $selectedItem) { course in
VStack(alignment: .leading) {
Text(course.name)
.font(.title)
Text(course.type)
.font(.caption)
.foregroundColor(.gray)
}
}
.navigationTitle("DevTechie")
.toolbar {
EditButton()
}
}
}
}
struct ListWithForEach: View {
let courses = DevTechieCourse.sample
var body: some View {
NavigationView {
List {
ForEach(courses) { course in
VStack(alignment: .leading) {
Text(course.name)
.font(.title)
Text(course.type)
.font(.caption)
.foregroundColor(.gray)
}
}
}
.navigationTitle("DevTechie")
}
}
}
struct ListWithForEach: View {
@State private var courses = DevTechieCourse.sample
var body: some View {
NavigationView {
List {
ForEach(courses) { course in
VStack(alignment: .leading) {
Text(course.name)
.font(.title)
Text(course.type)
.font(.caption)
.foregroundColor(.gray)
}
}
.onMove(perform: moveItems)
}
.navigationTitle("DevTechie")
.toolbar {
EditButton()
}
}
}
func moveItems(from indexSet: IndexSet, to destination: Int) {
guard let idx = indexSet.first else { return }
let removedCourse = courses.remove(at: idx)
courses.insert(removedCourse, at: destination)
}
}
struct ListWithForEach: View {
@State private var courses = DevTechieCourse.sample
var body: some View {
NavigationView {
List {
ForEach(courses) { course in
VStack(alignment: .leading) {
Text(course.name)
.font(.title)
Text(course.type)
.font(.caption)
.foregroundColor(.gray)
}
}
.onDelete(perform: deleteItem)
}
.navigationTitle("DevTechie")
}
}
func deleteItem(at indexSet: IndexSet) {
courses.remove(atOffsets: indexSet)
}
}
struct ListWithForEach: View {
@State private var courses = DevTechieCourse.sample
var body: some View {
NavigationView {
List {
ForEach(courses) { course in
VStack(alignment: .leading) {
Text(course.name)
.font(.title)
Text(course.type)
.font(.caption)
.foregroundColor(.gray)
}
}
.onDelete(perform: deleteItem)
}
.navigationTitle("DevTechie")
.toolbar {
EditButton()
}
}
}
func deleteItem(at indexSet: IndexSet) {
courses.remove(atOffsets: indexSet)
}
}
struct ListStyleExample: View {
let courses = DevTechieCourse.sample
var body: some View {
NavigationView {
List(courses) { course in
VStack(alignment: .leading) {
Text(course.name)
.font(.title)
Text(course.type)
.font(.caption)
.foregroundColor(.gray)
}
}
.listStyle(.automatic)
.navigationTitle("DevTechie")
}
}
}
struct ListStyleExample: View {
let courses = DevTechieCourse.sample
var body: some View {
NavigationView {
List(courses) { course in
VStack(alignment: .leading) {
Text(course.name)
.font(.title)
Text(course.type)
.font(.caption)
.foregroundColor(.gray)
}
}
.listStyle(.grouped)
.navigationTitle("DevTechie")
}
}
}
struct ListStyleExample: View {
let courses = DevTechieCourse.sample
var body: some View {
NavigationView {
List(courses) { course in
VStack(alignment: .leading) {
Text(course.name)
.font(.title)
Text(course.type)
.font(.caption)
.foregroundColor(.gray)
}
}
.listStyle(.inset)
.navigationTitle("DevTechie")
}
}
}
struct ListStyleExample: View {
let courses = DevTechieCourse.sample
var body: some View {
NavigationView {
List(courses) { course in
VStack(alignment: .leading) {
Text(course.name)
.font(.title)
Text(course.type)
.font(.caption)
.foregroundColor(.gray)
}
}
.listStyle(.insetGrouped)
.navigationTitle("DevTechie")
}
}
}
struct ListStyleExample: View {
let courses = DevTechieCourse.sample
var body: some View {
NavigationView {
List(courses) { course in
VStack(alignment: .leading) {
Text(course.name)
.font(.title)
Text(course.type)
.font(.caption)
.foregroundColor(.gray)
}
}
.listStyle(.plain)
.navigationTitle("DevTechie")
}
}
}struct ListStyleExample: View {
let courses = DevTechieCourse.sample
var body: some View {
NavigationView {
List(courses) { course in
VStack(alignment: .leading) {
Text(course.name)
.font(.title)
Text(course.type)
.font(.caption)
.foregroundColor(.gray)
}
}
.listStyle(.sidebar)
.navigationTitle("DevTechie")
}
}
}
struct ListStyleExample: View {
let courses = DevTechieCourse.sample
var body: some View {
NavigationView {
List(courses) { course in
VStack(alignment: .leading) {
Text(course.name)
.font(.title)
Text(course.type)
.font(.caption)
.foregroundColor(.gray)
}
.listRowBackground(Color.orange.opacity(0.3))
}
.listStyle(.sidebar)
.navigationTitle("DevTechie")
}
}
}
struct ListStyleExample: View {
let courses = DevTechieCourse.sample
var body: some View {
NavigationView {
List(courses) { course in
VStack(alignment: .leading) {
Text(course.name)
.font(.title)
Text(course.type)
.font(.caption)
.foregroundColor(.gray)
}
.listRowBackground(RoundedRectangle(cornerRadius: 10).fill(Color.orange.opacity(0.3)))
}
.listStyle(.sidebar)
.navigationTitle("DevTechie")
}
}
}
struct ListStyleExample: View {
let courses = DevTechieCourse.sample
var body: some View {
NavigationView {
List(courses) { course in
VStack(alignment: .leading) {
Text(course.name)
.font(.title)
Text(course.type)
.font(.caption)
.foregroundColor(.gray)
}
.listRowBackground(Text("DevTechie").font(.largeTitle).opacity(0.2))
}
.listStyle(.sidebar)
.navigationTitle("DevTechie")
}
}
}
struct ListStyleExample: View {
let courses = DevTechieCourse.sample
var body: some View {
NavigationView {
List(courses.indices) { idx in
VStack(alignment: .leading) {
Text(courses[idx].name)
.font(.title)
Text(courses[idx].type)
.font(.caption)
.foregroundColor(.gray)
}
.listRowBackground(idx % 2 == 0 ? Color.orange.opacity(0.5) : Color.pink.opacity(0.5))
}
.listStyle(.sidebar)
.navigationTitle("DevTechie")
}
}
}
struct ListStyleExample: View {
let courses = DevTechieCourse.sample
var body: some View {
NavigationView {
List(courses) { course in
VStack(alignment: .leading) {
Text(course.name)
.font(.title)
Text(course.type)
.font(.caption)
.foregroundColor(.secondary)
}
.listRowSeparator(.hidden)
}
.navigationTitle("DevTechie")
}
}
}
struct ListStyleExample: View {
let courses = DevTechieCourse.sample
var body: some View {
NavigationView {
List(courses) { course in
VStack(alignment: .leading) {
Text(course.name)
.font(.title)
Text(course.type)
.font(.caption)
.foregroundColor(.secondary)
}
.listRowSeparatorTint(.orange)
}
.navigationTitle("DevTechie")
}
}
}
struct ListStyleExample: View {
let courses = DevTechieCourse.sample
var body: some View {
NavigationView {
List(courses.indices) { idx in
VStack(alignment: .leading) {
Text(courses[idx].name)
.font(.title)
Text(courses[idx].type)
.font(.caption)
.foregroundColor(.secondary)
}
.listRowInsets(EdgeInsets(top: 0, leading: idx % 2 == 0 ? 10 : 30, bottom: 0, trailing: 10))
}
.navigationTitle("DevTechie")
}
}
}
extension DevTechieCourse {
static var sample: [DevTechieCourse] {
[
DevTechieCourse(name: "Mastring SwiftUI 3", type: "Video Course"),
DevTechieCourse(name: "Build Goals app in SwiftUI 3 & Firebase", type: "Video Course"),
DevTechieCourse(name: "Disney Plus Clone in SwiftUI", type: "Video Course"),
]
}
static var sampleArticle: [DevTechieCourse] {
[
DevTechieCourse(name: "TextField Deep Dive", type: "Article"),
DevTechieCourse(name: "User Authentication with FaceID", type: "Article"),
DevTechieCourse(name: "Lists Deep Dive", type: "Article"),
]
}
}struct ListStyleExample: View {
let courses = DevTechieCourse.sample
let articles = DevTechieCourse.sampleArticle
var body: some View {
NavigationView {
List {
Section(header: Text("Video Courses")) {
ForEach(courses) { course in
VStack(alignment: .leading) {
Text(course.name)
.font(.title)
Text(course.type)
.font(.caption)
.foregroundColor(.secondary)
}
}
}
Section(header: Text("Articles")) {
ForEach(articles) { course in
VStack(alignment: .leading) {
Text(course.name)
.font(.title)
Text(course.type)
.font(.caption)
.foregroundColor(.secondary)
}
}
}
}
.navigationTitle("DevTechie")
}
}
}
struct ListStyleExample: View {
let courses = DevTechieCourse.sample
let articles = DevTechieCourse.sampleArticle
var body: some View {
NavigationView {
List {
Section(header: Text("Video Courses")) {
ForEach(courses) { course in
VStack(alignment: .leading) {
Text(course.name)
.font(.title)
Text(course.type)
.font(.caption)
.foregroundColor(.secondary)
}
}
}
Section(header: Text("Articles")) {
ForEach(articles) { course in
VStack(alignment: .leading) {
Text(course.name)
.font(.title)
Text(course.type)
.font(.caption)
.foregroundColor(.secondary)
}
}
}
}
.listStyle(.automatic)
.navigationTitle("DevTechie")
}
}
}
struct ListStyleExample: View {
let courses = DevTechieCourse.sample
let articles = DevTechieCourse.sampleArticle
var body: some View {
NavigationView {
List {
Section(header: Text("Video Courses")) {
ForEach(courses) { course in
VStack(alignment: .leading) {
Text(course.name)
.font(.title)
Text(course.type)
.font(.caption)
.foregroundColor(.secondary)
}
}
}
Section(header: Text("Articles")) {
ForEach(articles) { course in
VStack(alignment: .leading) {
Text(course.name)
.font(.title)
Text(course.type)
.font(.caption)
.foregroundColor(.secondary)
}
}
}
}
.listStyle(.grouped)
.navigationTitle("DevTechie")
}
}
}
struct ListStyleExample: View {
let courses = DevTechieCourse.sample
let articles = DevTechieCourse.sampleArticle
var body: some View {
NavigationView {
List {
Section(header: Text("Video Courses")) {
ForEach(courses) { course in
VStack(alignment: .leading) {
Text(course.name)
.font(.title)
Text(course.type)
.font(.caption)
.foregroundColor(.secondary)
}
}
}
Section(header: Text("Articles")) {
ForEach(articles) { course in
VStack(alignment: .leading) {
Text(course.name)
.font(.title)
Text(course.type)
.font(.caption)
.foregroundColor(.secondary)
}
}
}
}
.listStyle(.inset)
.navigationTitle("DevTechie")
}
}
}
struct ListStyleExample: View {
let courses = DevTechieCourse.sample
let articles = DevTechieCourse.sampleArticle
var body: some View {
NavigationView {
List {
Section(header: Text("Video Courses")) {
ForEach(courses) { course in
VStack(alignment: .leading) {
Text(course.name)
.font(.title)
Text(course.type)
.font(.caption)
.foregroundColor(.secondary)
}
}
}
Section(header: Text("Articles")) {
ForEach(articles) { course in
VStack(alignment: .leading) {
Text(course.name)
.font(.title)
Text(course.type)
.font(.caption)
.foregroundColor(.secondary)
}
}
}
}
.listStyle(.insetGrouped)
.navigationTitle("DevTechie")
}
}
}
struct ListStyleExample: View {
let courses = DevTechieCourse.sample
let articles = DevTechieCourse.sampleArticle
var body: some View {
NavigationView {
List {
Section(header: Text("Video Courses")) {
ForEach(courses) { course in
VStack(alignment: .leading) {
Text(course.name)
.font(.title)
Text(course.type)
.font(.caption)
.foregroundColor(.secondary)
}
}
}
Section(header: Text("Articles")) {
ForEach(articles) { course in
VStack(alignment: .leading) {
Text(course.name)
.font(.title)
Text(course.type)
.font(.caption)
.foregroundColor(.secondary)
}
}
}
}
.listStyle(.plain)
.navigationTitle("DevTechie")
}
}
}
struct ListStyleExample: View {
let courses = DevTechieCourse.sample
let articles = DevTechieCourse.sampleArticle
var body: some View {
NavigationView {
List {
Section(header: Text("Video Courses")) {
ForEach(courses) { course in
VStack(alignment: .leading) {
Text(course.name)
.font(.title)
Text(course.type)
.font(.caption)
.foregroundColor(.secondary)
}
}
}
Section(header: Text("Articles")) {
ForEach(articles) { course in
VStack(alignment: .leading) {
Text(course.name)
.font(.title)
Text(course.type)
.font(.caption)
.foregroundColor(.secondary)
}
}
}
}
.listStyle(.sidebar)
.navigationTitle("DevTechie")
}
}
}
struct ListStyleExample: View {
let courses = DevTechieCourse.sample
let articles = DevTechieCourse.sampleArticle
var body: some View {
NavigationView {
List {
Section(header: Text("Video Courses")) {
ForEach(courses) { course in
VStack(alignment: .leading) {
Text(course.name)
.font(.title)
Text(course.type)
.font(.caption)
.foregroundColor(.secondary)
}
}
}
.listSectionSeparator(.hidden)
Section(header: Text("Articles")) {
ForEach(articles) { course in
VStack(alignment: .leading) {
Text(course.name)
.font(.title)
Text(course.type)
.font(.caption)
.foregroundColor(.secondary)
}
}
}
.listSectionSeparator(.hidden)
}
.listStyle(.plain)
.navigationTitle("DevTechie")
}
}
}
struct ListStyleExample: View {
let courses = DevTechieCourse.sample
let articles = DevTechieCourse.sampleArticle
var body: some View {
NavigationView {
List {
Section(header: Text("Video Courses")) {
ForEach(courses) { course in
VStack(alignment: .leading) {
Text(course.name)
.font(.title)
Text(course.type)
.font(.caption)
.foregroundColor(.secondary)
}
}
}
.listSectionSeparatorTint(.pink)
Section(header: Text("Articles")) {
ForEach(articles) { course in
VStack(alignment: .leading) {
Text(course.name)
.font(.title)
Text(course.type)
.font(.caption)
.foregroundColor(.secondary)
}
}
}
.listSectionSeparatorTint(.orange)
}
.listStyle(.plain)
.navigationTitle("DevTechie")
}
}
}
struct CourseCategory: Identifiable {
let id = UUID()
var title = ""
var subCategory: [CourseCategory]?
}extension CourseCategory {
static var sample: [CourseCategory] {
[
CourseCategory(title: "iOS Development", subCategory: [
CourseCategory(title: "SwiftUI"),
CourseCategory(title: "UIKit")
]),
CourseCategory(title: "Web Development", subCategory: [
CourseCategory(title: "Angular"),
CourseCategory(title: "Flutter"),
CourseCategory(title: "React")
]),
]
}
}struct ListWithChildren: View {
var body: some View {
List(CourseCategory.sample, children: \.subCategory) { category in
Text(category.title)
}
}
}
struct DTCourse: Identifiable {
let id = UUID()
var title: String
var completed = false
}extension DTCourse {
static var sample: [DTCourse] {
[
DTCourse(title: "Mastring SwiftUI 3"),
DTCourse(title: "Build Goals app in SwiftUI 3 & Firebase"),
DTCourse(title: "Disney Plus Clone in SwiftUI")
]
}
}struct ListBindingExample: View {
@State private var courses = DTCourse.sample
@State private var completedCourses = [DTCourse]()
var body: some View {
List {
Section(header: Text("All Courses")) {
ForEach($courses) { $course in
HStack {
Text(course.title)
Spacer()
Toggle("", isOn: $course.completed)
.onChange(of: course.completed) { newValue in
if newValue {
completedCourses.append(course)
} else {
completedCourses.removeAll(where: {$0.id == course.id})
}
}
.labelsHidden()
}
}
}
Section(header: Text("Completed")) {
ForEach(completedCourses) { course in
Text(course.title)
}
}
}
}
}
struct BindingInList: View {
let courses = DevTechieCourse.sample
let articles = DevTechieCourse.sampleArticle
var body: some View {
NavigationView {
List {
Section(header: Text("Video Courses")) {
ForEach(courses) { course in
VStack(alignment: .leading) {
Text(course.name)
.font(.title)
Text(course.type)
.font(.caption)
.foregroundColor(.secondary)
}
}
}
Section(header: Text("Articles")) {
ForEach(articles) { course in
VStack(alignment: .leading) {
Text(course.name)
.font(.title)
Text(course.type)
.font(.caption)
.foregroundColor(.secondary)
}
}
}
}
.listStyle(.grouped)
.safeAreaInset(edge: .bottom) {
VStack {
Text("https://www.devtechie.com")
.font(.title)
}
.frame(maxWidth: .infinity)
.background(.ultraThinMaterial)
}
.navigationTitle("DevTechie")
}
}
}
struct PullToRefreshList: View {
@State private var courseList = [DTCourse]()
var body: some View {
NavigationView {
List(courseList) { course in
Text(course.title)
}
.refreshable {
let courses = await refreshCourseList()
courseList.append(contentsOf: courses)
}
.navigationTitle("DevTechie.com")
}
}
func refreshCourseList() async -> [DTCourse] {
Thread.sleep(until: Date().addingTimeInterval(10))
return DTCourse.sample
}
}
struct DTCourse: Identifiable {
let id = UUID()
var title: String
var completed = false
}extension DTCourse {
static var sample: [DTCourse] {
[
DTCourse(title: "Mastring SwiftUI 3"),
DTCourse(title: "Build Goals app in SwiftUI 3 & Firebase"),
DTCourse(title: "Disney Plus Clone in SwiftUI")
]
}
}struct SwipeActionInList: View {
@State private var courses = DTCourse.sample
var body: some View {
NavigationView {
List {
Section(footer: Text("Swipe to mark/unmark course completed.")) {
ForEach($courses) { $course in
Text(course.title)
.strikethrough(course.completed, color: .red)
.swipeActions {
Button {
course.completed.toggle()
} label: {
Label("Done", systemImage: "checkmark.circle.fill")
}
.tint(Color.pink)
}
}
}
}
.navigationTitle("DevTechie.com")
}
}
}
struct SwipeActionInList: View {
@State private var courses = DTCourse.sample
var body: some View {
NavigationView {
List {
Section(footer: Text("Swipe to mark/unmark course completed.")) {
ForEach($courses) { $course in
Text(course.title)
.strikethrough(course.completed, color: .red)
.swipeActions {
Button {
course.completed = true
} label: {
Label("Done", systemImage: "checkmark.circle.fill")
}
.tint(Color.pink)
Button {
course.completed = false
} label: {
Label("Done", systemImage: "minus.circle.fill")
}
.tint(Color.orange)
}
}
}
}
.navigationTitle("DevTechie.com")
}
}
}
struct SwipeActionInList: View {
@State private var courses = DTCourse.sample
var body: some View {
NavigationView {
List {
Section(footer: Text("Swipe to mark/unmark course completed.")) {
ForEach($courses) { $course in
Text(course.title)
.strikethrough(course.completed, color: .red)
.swipeActions(allowsFullSwipe: false) {
Button {
course.completed = true
} label: {
Label("Done", systemImage: "checkmark.circle.fill")
}
.tint(Color.pink)
Button {
course.completed = false
} label: {
Label("Done", systemImage: "minus.circle.fill")
}
.tint(Color.orange)
}
}
}
}
.navigationTitle("DevTechie.com")
}
}
}
struct SwipeActionInList: View {
@State private var courses = DTCourse.sample
var body: some View {
NavigationView {
List {
Section(footer: Text("Swipe to mark/unmark course completed.")) {
ForEach($courses) { $course in
Text(course.title)
.strikethrough(course.completed, color: .red)
.swipeActions(edge: .leading, allowsFullSwipe: false) {
Button {
course.completed = true
} label: {
Label("Complete", systemImage: "checkmark.circle.fill")
}
.tint(Color.pink)
}
.swipeActions(edge: .trailing, allowsFullSwipe: false) {
Button {
course.completed = false
} label: {
Label("InComplete", systemImage: "minus.circle.fill")
}
.tint(Color.orange)
}
}
}
}
.navigationTitle("DevTechie.com")
}
}
}
struct SearchWithList: View {
@State private var searchString = ""
@State private var courses = DTCourse.sample
var body: some View {
NavigationView {
List(courses) { course in
Text(course.title)
.font(.title)
}
.searchable(text: $searchString)
.onChange(of: searchString, perform: { newValue in
if newValue.isEmpty {
courses = DTCourse.sample
} else {
courses = DTCourse.sample.filter { $0.title.lowercased().hasPrefix(searchString.lowercased())}
}
})
.navigationTitle("DevTechie.com")
}
}
}
extension DTCourse {
static var swiftUISample: [DTCourse] {
[
DTCourse(title: "SwiftUI Deep Dive"),
DTCourse(title: "Goals app in SwiftUI"),
DTCourse(title: "Disney Plus Clone in SwiftUI"),
DTCourse(title: "TextField Deep Dive"),
DTCourse(title: "List View Deep Dive"),
DTCourse(title: "Image View Deep Dive"),
DTCourse(title: "Label Deep Dive"),
DTCourse(title: "SwiftUI Deep Dive"),
DTCourse(title: "Goals app in SwiftUI"),
DTCourse(title: "Disney Plus Clone in SwiftUI"),
DTCourse(title: "TextField Deep Dive"),
DTCourse(title: "List View Deep Dive"),
DTCourse(title: "Image View Deep Dive"),
DTCourse(title: "Label Deep Dive"),
DTCourse(title: "SwiftUI Deep Dive"),
DTCourse(title: "Goals app in SwiftUI"),
DTCourse(title: "Disney Plus Clone in SwiftUI"),
DTCourse(title: "TextField Deep Dive"),
DTCourse(title: "List View Deep Dive"),
DTCourse(title: "Image View Deep Dive"),
DTCourse(title: "Label Deep Dive"),
DTCourse(title: "SwiftUI Deep Dive"),
DTCourse(title: "Goals app in SwiftUI"),
DTCourse(title: "Disney Plus Clone in SwiftUI"),
DTCourse(title: "TextField Deep Dive"),
DTCourse(title: "List View Deep Dive"),
DTCourse(title: "Image View Deep Dive"),
DTCourse(title: "Label Deep Dive")
]
}
}struct ScrollviewReaderWithList: View {
@State private var scrollToID = ""
private let categories = ["SwiftUI", "UIKit", "Machine Learning"]
var body: some View {
ScrollViewReader { proxy in
HStack {
Spacer()
Button("SwiftUI") {
withAnimation {
proxy.scrollTo(categories[0], anchor: .top)
}
}
.foregroundColor(.white)
.padding()
.background(RoundedRectangle(cornerRadius: 10).fill(Color.orange))
Spacer()
Button("UIKit") {
withAnimation {
proxy.scrollTo(categories[1], anchor: .top)
}
}
.foregroundColor(.white)
.padding()
.background(RoundedRectangle(cornerRadius: 10).fill(Color.orange))
Spacer()
Button("ML") {
withAnimation {
proxy.scrollTo(categories[2], anchor: .top)
}
}
.foregroundColor(.white)
.padding()
.background(RoundedRectangle(cornerRadius: 10).fill(Color.orange))
Spacer()
}
List {
Section(header: Text("SwiftUI Courses")) {
ForEach(DTCourse.swiftUISample) { course in
Text(course.title)
}
}.id(categories[0])
Section(header: Text("UIKit Courses")) {
ForEach(DTCourse.swiftUISample) { course in
Text(course.title)
}
}.id(categories[1])
Section(header: Text("Machine Learning Courses")) {
ForEach(DTCourse.swiftUISample) { course in
Text(course.title)
}
}.id(categories[2])
}
}
}
}