From f28842149304b2f2a6845fcef94d46373af067f5 Mon Sep 17 00:00:00 2001 From: wangdl Date: Wed, 27 May 2026 22:12:00 +0800 Subject: [PATCH] =?UTF-8?q?fix(ios):=20=E6=89=80=E6=9C=89=E5=AD=90?= =?UTF-8?q?=E9=A1=B5=E9=9D=A2=E9=9A=90=E8=97=8F=E5=BA=95=E9=83=A8=20TabBar?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 17个子页面添加 .toolbar(.hidden, for: .tabBar) - 包括:知识库详情、创建、编辑、搜索、添加知识点、 个人资料编辑、设置、反馈、目标、方法偏好、通知、 AI对话、每日思考、薄弱点、回忆测试、AI反馈、主动回忆、 复习卡片、学习会话 Co-Authored-By: Claude Opus 4.7 --- AIStudyApp/AIStudyApp/Features/AI/AIChatPage.swift | 2 +- .../AIStudyApp/Features/AI/AIFeedbackPageView.swift | 2 +- .../AIStudyApp/Features/AI/ActiveRecallView.swift | 2 +- .../AIStudyApp/Features/AI/DailyThinkingPage.swift | 2 +- .../AIStudyApp/Features/AI/RecallTestPage.swift | 2 +- .../AIStudyApp/Features/AI/WeakPointsPage.swift | 2 +- .../Features/Library/LibraryHomeView.swift | 2 +- .../Features/Library/LibrarySubpages.swift | 12 ++++++------ .../Features/Profile/EditProfilePage.swift | 1 + .../Features/Profile/FeedbackFormView.swift | 2 +- .../Features/Profile/GoalSettingDetailView.swift | 2 +- .../Features/Profile/MethodPreferenceView.swift | 2 +- .../Features/Profile/NotificationListView.swift | 2 +- .../AIStudyApp/Features/Profile/SettingsView.swift | 2 +- .../Features/Study/LearningSessionView.swift | 2 +- .../AIStudyApp/Features/Study/ReviewCardView.swift | 2 +- 16 files changed, 21 insertions(+), 20 deletions(-) diff --git a/AIStudyApp/AIStudyApp/Features/AI/AIChatPage.swift b/AIStudyApp/AIStudyApp/Features/AI/AIChatPage.swift index 3d504a1..8c52e8e 100644 --- a/AIStudyApp/AIStudyApp/Features/AI/AIChatPage.swift +++ b/AIStudyApp/AIStudyApp/Features/AI/AIChatPage.swift @@ -38,7 +38,7 @@ struct AIChatPage: View { .padding(.horizontal, 20).padding(.bottom, 34) } } - .navigationBarTitleDisplayMode(.inline) + .navigationBarTitleDisplayMode(.inline).toolbar(.hidden, for: .tabBar) .toolbarBackground(.hidden, for: .navigationBar) } diff --git a/AIStudyApp/AIStudyApp/Features/AI/AIFeedbackPageView.swift b/AIStudyApp/AIStudyApp/Features/AI/AIFeedbackPageView.swift index 0352df3..ef9ade9 100644 --- a/AIStudyApp/AIStudyApp/Features/AI/AIFeedbackPageView.swift +++ b/AIStudyApp/AIStudyApp/Features/AI/AIFeedbackPageView.swift @@ -101,7 +101,7 @@ struct AIFeedbackPageView: View { .transition(.opacity.combined(with: .scale(scale: 0.95))) } } - .navigationBarTitleDisplayMode(.inline) + .navigationBarTitleDisplayMode(.inline).toolbar(.hidden, for: .tabBar) .toolbarBackground(.hidden, for: .navigationBar) } } diff --git a/AIStudyApp/AIStudyApp/Features/AI/ActiveRecallView.swift b/AIStudyApp/AIStudyApp/Features/AI/ActiveRecallView.swift index 42151c0..fe67d16 100644 --- a/AIStudyApp/AIStudyApp/Features/AI/ActiveRecallView.swift +++ b/AIStudyApp/AIStudyApp/Features/AI/ActiveRecallView.swift @@ -39,7 +39,7 @@ struct ActiveRecallView: View { .scrollIndicators(.hidden) } } - .navigationBarTitleDisplayMode(.inline) + .navigationBarTitleDisplayMode(.inline).toolbar(.hidden, for: .tabBar) .toolbarBackground(.hidden, for: .navigationBar) .task { await viewModel.loadQuestions() } .overlay { diff --git a/AIStudyApp/AIStudyApp/Features/AI/DailyThinkingPage.swift b/AIStudyApp/AIStudyApp/Features/AI/DailyThinkingPage.swift index e3a9568..d5a1b0c 100644 --- a/AIStudyApp/AIStudyApp/Features/AI/DailyThinkingPage.swift +++ b/AIStudyApp/AIStudyApp/Features/AI/DailyThinkingPage.swift @@ -12,6 +12,6 @@ struct DailyThinkingPage: View { VStack(alignment:.leading,spacing:8){Text("你的回答").font(.system(size:13,weight:.semibold)).foregroundColor(Color.zxF04);TextEditor(text:$answer).zxFontScaled(size:13).foregroundColor(Color.zxF0).tint(Color.zxPurple).frame(minHeight:160).scrollContentBackground(.hidden).padding(12).background(Color.zxFill004).clipShape(RoundedRectangle(cornerRadius:14)).overlay(RoundedRectangle(cornerRadius:14).stroke(Color.zxBorder008,lineWidth:1))} if !submitted{ NavigationLink(value: Route.aiFeedback){ Text("提交回答,获取 AI 反馈").font(.system(size:14,weight:.bold)).foregroundColor(.white).frame(maxWidth:.infinity).frame(height:52).background(ZXGradient.ctaPurple).clipShape(RoundedRectangle(cornerRadius:16)).shadow(color:Color(hex:"#7C6EFA",opacity:0.3),radius:24) }.zxPressable() } }.padding(.horizontal,20).padding(.top, 8).padding(.bottom,120) }.scrollIndicators(.hidden) - }.navigationBarTitleDisplayMode(.inline).toolbarBackground(.hidden,for:.navigationBar) + }.navigationBarTitleDisplayMode(.inline).toolbar(.hidden, for: .tabBar).toolbarBackground(.hidden,for:.navigationBar) } } diff --git a/AIStudyApp/AIStudyApp/Features/AI/RecallTestPage.swift b/AIStudyApp/AIStudyApp/Features/AI/RecallTestPage.swift index 6ab8c13..f07e52e 100644 --- a/AIStudyApp/AIStudyApp/Features/AI/RecallTestPage.swift +++ b/AIStudyApp/AIStudyApp/Features/AI/RecallTestPage.swift @@ -32,7 +32,7 @@ struct RecallTestPage: View { } .scrollIndicators(.hidden) } - .navigationBarTitleDisplayMode(.inline) + .navigationBarTitleDisplayMode(.inline).toolbar(.hidden, for: .tabBar) .toolbarBackground(.hidden, for: .navigationBar) } } diff --git a/AIStudyApp/AIStudyApp/Features/AI/WeakPointsPage.swift b/AIStudyApp/AIStudyApp/Features/AI/WeakPointsPage.swift index ec265ba..8d147ed 100644 --- a/AIStudyApp/AIStudyApp/Features/AI/WeakPointsPage.swift +++ b/AIStudyApp/AIStudyApp/Features/AI/WeakPointsPage.swift @@ -16,7 +16,7 @@ struct WeakPointsPage: View { } .scrollIndicators(.hidden) } - .navigationBarTitleDisplayMode(.inline) + .navigationBarTitleDisplayMode(.inline).toolbar(.hidden, for: .tabBar) .toolbarBackground(.hidden, for: .navigationBar) } } diff --git a/AIStudyApp/AIStudyApp/Features/Library/LibraryHomeView.swift b/AIStudyApp/AIStudyApp/Features/Library/LibraryHomeView.swift index 69a96fa..cca83d6 100644 --- a/AIStudyApp/AIStudyApp/Features/Library/LibraryHomeView.swift +++ b/AIStudyApp/AIStudyApp/Features/Library/LibraryHomeView.swift @@ -81,6 +81,6 @@ struct LibrarySearchView: View { } }.padding(.horizontal, 20) }.scrollIndicators(.hidden) } - }.navigationBarTitleDisplayMode(.inline).toolbarBackground(.hidden, for: .navigationBar) + }.navigationBarTitleDisplayMode(.inline).toolbar(.hidden, for: .tabBar).toolbarBackground(.hidden, for: .navigationBar) } } diff --git a/AIStudyApp/AIStudyApp/Features/Library/LibrarySubpages.swift b/AIStudyApp/AIStudyApp/Features/Library/LibrarySubpages.swift index 33a192c..7a6dfad 100644 --- a/AIStudyApp/AIStudyApp/Features/Library/LibrarySubpages.swift +++ b/AIStudyApp/AIStudyApp/Features/Library/LibrarySubpages.swift @@ -36,7 +36,7 @@ struct CreateLibraryPage: View { } .disabled(isCreating || name.trimmingCharacters(in: .whitespacesAndNewlines).isEmpty) }.padding(.horizontal, 20).padding(.top, 20) }.scrollIndicators(.hidden) } - }.navigationBarTitleDisplayMode(.inline).toolbarBackground(.hidden, for: .navigationBar)} + }.navigationBarTitleDisplayMode(.inline).toolbarBackground(.hidden, for: .navigationBar).toolbar(.hidden, for: .tabBar)} } struct LibraryDetailPage: View { @@ -68,7 +68,7 @@ struct LibraryDetailPage: View { .scrollIndicators(.hidden) .zxPullToRefresh { await viewModel.refresh(knowledgeBaseId: knowledgeBaseId) } } } - .navigationBarTitleDisplayMode(.inline).toolbarBackground(.hidden, for: .navigationBar) + .navigationBarTitleDisplayMode(.inline).toolbarBackground(.hidden, for: .navigationBar).toolbar(.hidden, for: .tabBar) .toolbar { ToolbarItem(placement: .topBarTrailing) { NavigationLink(value: Route.addKnowledge(knowledgeBaseId: knowledgeBaseId)) { @@ -226,7 +226,7 @@ struct AddKnowledgePage: View { .disabled(!canSave || isSaving) }.padding(.horizontal, 20).padding(.top, 8).padding(.bottom, 80) }.scrollIndicators(.hidden) } } - .navigationBarTitleDisplayMode(.inline).toolbarBackground(.hidden, for: .navigationBar) + .navigationBarTitleDisplayMode(.inline).toolbarBackground(.hidden, for: .navigationBar).toolbar(.hidden, for: .tabBar) .fileImporter(isPresented: $showFilePicker, allowedContentTypes: [.plainText, .pdf, .image], allowsMultipleSelection: false) { result in if case .success(let urls) = result, let url = urls.first { handleFile(url) } } @@ -382,7 +382,7 @@ struct KnowledgeDetailPage: View { } } }.padding(.horizontal, 20).padding(.bottom, 80) }.scrollIndicators(.hidden) } - }.navigationBarTitleDisplayMode(.inline).toolbarBackground(.hidden, for: .navigationBar)} + }.navigationBarTitleDisplayMode(.inline).toolbarBackground(.hidden, for: .navigationBar).toolbar(.hidden, for: .tabBar)} } struct ZXChip: View { let text: String; let color: Color var body: some View { Text(text).font(.system(size: 10, weight: .semibold)).foregroundColor(color).padding(.horizontal, 8).padding(.vertical, 2).background(color.opacity(0.12)).clipShape(Capsule()) } @@ -397,7 +397,7 @@ struct ImportPage: View { ZXImportOption(icon: "link", title: "链接导入", desc: "粘贴网页链接,自动提取内容") ZXImportOption(icon: "photo.on.rectangle", title: "相册导入", desc: "从相册选择截图或图片") }.padding(.horizontal, 20).padding(.top, 8) }.scrollIndicators(.hidden) } - }.navigationBarTitleDisplayMode(.inline).toolbarBackground(.hidden, for: .navigationBar)} + }.navigationBarTitleDisplayMode(.inline).toolbarBackground(.hidden, for: .navigationBar).toolbar(.hidden, for: .tabBar)} } struct ZXImportOption: View { let icon: String; let title: String; let desc: String var body: some View { Button { } label: { HStack(spacing: 14) { Image(systemName: icon).font(.system(size: 22)).foregroundColor(Color.zxPurple).frame(width: 48, height: 48).background(Color.zxPurpleBG(0.1)).clipShape(RoundedRectangle(cornerRadius: 14)); VStack(alignment: .leading, spacing: 2) { Text(title).font(.system(size: 15, weight: .semibold)).foregroundColor(Color.zxF0); Text(desc).font(.system(size: 12)).foregroundColor(Color.zxF04) }; Spacer(); Image(systemName: "chevron.right").font(.system(size: 12)).foregroundColor(Color.zxF03) }.padding(16).background(Color.zxFill003).clipShape(RoundedRectangle(cornerRadius: 16)).overlay(RoundedRectangle(cornerRadius: 16).stroke(Color.zxBorder006, lineWidth: 1)) }.foregroundColor(.primary) } @@ -421,5 +421,5 @@ struct EditKnowledgePage: View { Task { _ = try? await KnowledgeItemService.shared.update(id: item.id, title: title, content: content, summary: nil) } } label: { Text("保存修改").font(.system(size: 14, weight: .bold)).foregroundColor(.white).frame(maxWidth: .infinity).frame(height: 52).background(ZXGradient.ctaPurple).clipShape(RoundedRectangle(cornerRadius: 16)) } }.padding(.horizontal, 20).padding(.top, 8).padding(.bottom, 80) }.scrollIndicators(.hidden) } - }.navigationBarTitleDisplayMode(.inline).toolbarBackground(.hidden, for: .navigationBar)} + }.navigationBarTitleDisplayMode(.inline).toolbarBackground(.hidden, for: .navigationBar).toolbar(.hidden, for: .tabBar)} } diff --git a/AIStudyApp/AIStudyApp/Features/Profile/EditProfilePage.swift b/AIStudyApp/AIStudyApp/Features/Profile/EditProfilePage.swift index 100dae7..add11aa 100644 --- a/AIStudyApp/AIStudyApp/Features/Profile/EditProfilePage.swift +++ b/AIStudyApp/AIStudyApp/Features/Profile/EditProfilePage.swift @@ -142,6 +142,7 @@ struct EditProfilePage: View { } .navigationTitle("编辑资料") .navigationBarTitleDisplayMode(.inline) + .toolbar(.hidden, for: .tabBar) .toolbarBackground(.hidden, for: .navigationBar) .photosPicker(isPresented: $showPhotoPicker, selection: $selectedPhotoItem, matching: .images) .onChange(of: selectedPhotoItem) { _, item in diff --git a/AIStudyApp/AIStudyApp/Features/Profile/FeedbackFormView.swift b/AIStudyApp/AIStudyApp/Features/Profile/FeedbackFormView.swift index 4e6beaf..0b4b1a8 100644 --- a/AIStudyApp/AIStudyApp/Features/Profile/FeedbackFormView.swift +++ b/AIStudyApp/AIStudyApp/Features/Profile/FeedbackFormView.swift @@ -39,6 +39,6 @@ struct FeedbackFormView: View { .disabled(isSubmitting) }.padding(.horizontal, 20).padding(.top, 8).padding(.bottom, 80) }.scrollIndicators(.hidden) - }.navigationBarTitleDisplayMode(.inline).toolbarBackground(.hidden, for: .navigationBar) + }.navigationBarTitleDisplayMode(.inline).toolbar(.hidden, for: .tabBar).toolbarBackground(.hidden, for: .navigationBar) } } diff --git a/AIStudyApp/AIStudyApp/Features/Profile/GoalSettingDetailView.swift b/AIStudyApp/AIStudyApp/Features/Profile/GoalSettingDetailView.swift index 2ab21fd..41f4df1 100644 --- a/AIStudyApp/AIStudyApp/Features/Profile/GoalSettingDetailView.swift +++ b/AIStudyApp/AIStudyApp/Features/Profile/GoalSettingDetailView.swift @@ -49,6 +49,6 @@ struct GoalSettingDetailView: View { .disabled(isSaving) }.padding(.horizontal, 20).padding(.top, 8).padding(.bottom, 80) }.scrollIndicators(.hidden) - }.navigationBarTitleDisplayMode(.inline).toolbarBackground(.hidden, for: .navigationBar) + }.navigationBarTitleDisplayMode(.inline).toolbar(.hidden, for: .tabBar).toolbarBackground(.hidden, for: .navigationBar) } } diff --git a/AIStudyApp/AIStudyApp/Features/Profile/MethodPreferenceView.swift b/AIStudyApp/AIStudyApp/Features/Profile/MethodPreferenceView.swift index 510d4d7..0856be9 100644 --- a/AIStudyApp/AIStudyApp/Features/Profile/MethodPreferenceView.swift +++ b/AIStudyApp/AIStudyApp/Features/Profile/MethodPreferenceView.swift @@ -46,6 +46,6 @@ struct MethodPreferenceView: View { .disabled(isSaving) }.padding(.horizontal, 20).padding(.top, 8).padding(.bottom, 80) }.scrollIndicators(.hidden) - }.navigationBarTitleDisplayMode(.inline).toolbarBackground(.hidden, for: .navigationBar) + }.navigationBarTitleDisplayMode(.inline).toolbar(.hidden, for: .tabBar).toolbarBackground(.hidden, for: .navigationBar) } } diff --git a/AIStudyApp/AIStudyApp/Features/Profile/NotificationListView.swift b/AIStudyApp/AIStudyApp/Features/Profile/NotificationListView.swift index 85f24be..421bb6b 100644 --- a/AIStudyApp/AIStudyApp/Features/Profile/NotificationListView.swift +++ b/AIStudyApp/AIStudyApp/Features/Profile/NotificationListView.swift @@ -38,7 +38,7 @@ struct NotificationListView: View { .scrollIndicators(.hidden) .zxPullToRefresh { await refresh() } } - .navigationBarTitleDisplayMode(.inline) + .navigationBarTitleDisplayMode(.inline).toolbar(.hidden, for: .tabBar) .toolbarBackground(.hidden, for: .navigationBar) .task { await loadNotifications() } } diff --git a/AIStudyApp/AIStudyApp/Features/Profile/SettingsView.swift b/AIStudyApp/AIStudyApp/Features/Profile/SettingsView.swift index 1b274f9..f619da0 100644 --- a/AIStudyApp/AIStudyApp/Features/Profile/SettingsView.swift +++ b/AIStudyApp/AIStudyApp/Features/Profile/SettingsView.swift @@ -115,7 +115,7 @@ struct SettingsView: View { notificationEnabled = p.notificationEnabled ?? true reviewReminder = notificationEnabled } - .navigationBarTitleDisplayMode(.inline).toolbarBackground(.hidden, for: .navigationBar) + .navigationBarTitleDisplayMode(.inline).toolbar(.hidden, for: .tabBar).toolbarBackground(.hidden, for: .navigationBar) } private func sectionHeader(_ text: String) -> some View { diff --git a/AIStudyApp/AIStudyApp/Features/Study/LearningSessionView.swift b/AIStudyApp/AIStudyApp/Features/Study/LearningSessionView.swift index 9a16fd9..78392f3 100644 --- a/AIStudyApp/AIStudyApp/Features/Study/LearningSessionView.swift +++ b/AIStudyApp/AIStudyApp/Features/Study/LearningSessionView.swift @@ -36,7 +36,7 @@ struct LearningSessionView: View { bottomBar }.ignoresSafeArea(edges: .bottom) } - .navigationBarTitleDisplayMode(.inline) + .navigationBarTitleDisplayMode(.inline).toolbar(.hidden, for: .tabBar) .toolbarBackground(.hidden, for: .navigationBar) .onReceive(timer) { _ in if isRunning { elapsed += 1 } diff --git a/AIStudyApp/AIStudyApp/Features/Study/ReviewCardView.swift b/AIStudyApp/AIStudyApp/Features/Study/ReviewCardView.swift index 2f7720a..8042831 100644 --- a/AIStudyApp/AIStudyApp/Features/Study/ReviewCardView.swift +++ b/AIStudyApp/AIStudyApp/Features/Study/ReviewCardView.swift @@ -40,7 +40,7 @@ struct ReviewCardView: View { .scrollIndicators(.hidden) } } - .navigationBarTitleDisplayMode(.inline) + .navigationBarTitleDisplayMode(.inline).toolbar(.hidden, for: .tabBar) .toolbarBackground(.hidden, for: .navigationBar) .task { await viewModel.loadDueCards() } .overlay {