From f3d52b3c3af95b8f76626b5df6aca11753d230a0 Mon Sep 17 00:00:00 2001 From: Ilyas Hallak Date: Wed, 1 Oct 2025 21:58:19 +0200 Subject: [PATCH] feat: Implement correct iOS 18 Tab API syntax - Use Tab(title, systemImage:) without value parameter as per iOS 18 standards - Remove manual selection handling as TabView handles it automatically - Simplify ForEach to iterate directly over tabs instead of enumeration - Remove .tag() and .tabItem modifiers which are no longer needed - Clean up selection state management for modern Tab API --- readeck/UI/Menu/PhoneTabView.swift | 32 ++++++++++++------------------ 1 file changed, 13 insertions(+), 19 deletions(-) diff --git a/readeck/UI/Menu/PhoneTabView.swift b/readeck/UI/Menu/PhoneTabView.swift index b5a5060..f60322e 100644 --- a/readeck/UI/Menu/PhoneTabView.swift +++ b/readeck/UI/Menu/PhoneTabView.swift @@ -12,7 +12,7 @@ struct PhoneTabView: View { private let moreTabs: [SidebarTab] = [.search, .article, .videos, .pictures, .tags, .settings] @State private var selectedMoreTab: SidebarTab? = nil - @State private var selectedTabIndex: Int = 1 + @State private var selectedTab: SidebarTab = .unread @State private var offlineBookmarksViewModel = OfflineBookmarksViewModel(syncUseCase: DefaultUseCaseFactory.shared.makeOfflineBookmarkSyncUseCase()) @EnvironmentObject var appSettings: AppSettings @@ -20,7 +20,7 @@ struct PhoneTabView: View { var body: some View { NavigationStack { GlobalPlayerContainerView { - TabView(selection: $selectedTabIndex) { + TabView { mainTabsContent moreTabContent } @@ -33,31 +33,25 @@ struct PhoneTabView: View { @ViewBuilder private var mainTabsContent: some View { - ForEach(Array(mainTabs.enumerated()), id: \.element) { idx, tab in - tabView(for: tab) - .tabItem { - Label(tab.label, systemImage: tab.systemImage) - } - .tag(idx) + ForEach(mainTabs, id: \.self) { tab in + Tab(tab.label, systemImage: tab.systemImage) { + tabView(for: tab) + } } } @ViewBuilder private var moreTabContent: some View { - VStack(spacing: 0) { - moreTabsList - moreTabsFooter - } - .tabItem { - Label("More", systemImage: "ellipsis") - } - .badge(offlineBookmarksViewModel.state.localBookmarkCount > 0 ? offlineBookmarksViewModel.state.localBookmarkCount : 0) - .tag(mainTabs.count) - .onAppear { - if selectedTabIndex == mainTabs.count && selectedMoreTab != nil { + Tab("More", systemImage: "ellipsis") { + VStack(spacing: 0) { + moreTabsList + moreTabsFooter + } + .onAppear { selectedMoreTab = nil } } + .badge(offlineBookmarksViewModel.state.localBookmarkCount > 0 ? offlineBookmarksViewModel.state.localBookmarkCount : 0) } @ViewBuilder