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
This commit is contained in:
Ilyas Hallak 2025-10-01 21:58:19 +02:00
parent a651398dca
commit f3d52b3c3a

View File

@ -12,7 +12,7 @@ struct PhoneTabView: View {
private let moreTabs: [SidebarTab] = [.search, .article, .videos, .pictures, .tags, .settings] private let moreTabs: [SidebarTab] = [.search, .article, .videos, .pictures, .tags, .settings]
@State private var selectedMoreTab: SidebarTab? = nil @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()) @State private var offlineBookmarksViewModel = OfflineBookmarksViewModel(syncUseCase: DefaultUseCaseFactory.shared.makeOfflineBookmarkSyncUseCase())
@EnvironmentObject var appSettings: AppSettings @EnvironmentObject var appSettings: AppSettings
@ -20,7 +20,7 @@ struct PhoneTabView: View {
var body: some View { var body: some View {
NavigationStack { NavigationStack {
GlobalPlayerContainerView { GlobalPlayerContainerView {
TabView(selection: $selectedTabIndex) { TabView {
mainTabsContent mainTabsContent
moreTabContent moreTabContent
} }
@ -33,31 +33,25 @@ struct PhoneTabView: View {
@ViewBuilder @ViewBuilder
private var mainTabsContent: some View { private var mainTabsContent: some View {
ForEach(Array(mainTabs.enumerated()), id: \.element) { idx, tab in ForEach(mainTabs, id: \.self) { tab in
tabView(for: tab) Tab(tab.label, systemImage: tab.systemImage) {
.tabItem { tabView(for: tab)
Label(tab.label, systemImage: tab.systemImage) }
}
.tag(idx)
} }
} }
@ViewBuilder @ViewBuilder
private var moreTabContent: some View { private var moreTabContent: some View {
VStack(spacing: 0) { Tab("More", systemImage: "ellipsis") {
moreTabsList VStack(spacing: 0) {
moreTabsFooter moreTabsList
} moreTabsFooter
.tabItem { }
Label("More", systemImage: "ellipsis") .onAppear {
}
.badge(offlineBookmarksViewModel.state.localBookmarkCount > 0 ? offlineBookmarksViewModel.state.localBookmarkCount : 0)
.tag(mainTabs.count)
.onAppear {
if selectedTabIndex == mainTabs.count && selectedMoreTab != nil {
selectedMoreTab = nil selectedMoreTab = nil
} }
} }
.badge(offlineBookmarksViewModel.state.localBookmarkCount > 0 ? offlineBookmarksViewModel.state.localBookmarkCount : 0)
} }
@ViewBuilder @ViewBuilder