fix(ios): 全局图标尺寸标准化 — 导航22/行内20/箭头14
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
This commit is contained in:
parent
18b0d1f4b2
commit
51f51692ef
@ -93,7 +93,7 @@ struct CreateLibraryPage: View {
|
||||
Text("选择一张图片作为封面").font(.system(size: 12)).foregroundColor(Color.zxF04)
|
||||
}
|
||||
Spacer()
|
||||
Image("icon-chevron-right").resizable().scaledToFit().frame(width: 14, height: 14).foregroundColor(Color.zxF03)
|
||||
Image("icon-chevron-right").resizable().scaledToFit().frame(width: 16, height: 16).foregroundColor(Color.zxF03)
|
||||
}
|
||||
.padding(.horizontal, 16).padding(.vertical, 14)
|
||||
.background(Color.zxFill004).clipShape(RoundedRectangle(cornerRadius: 14))
|
||||
@ -224,7 +224,7 @@ struct LibraryDetailPage: View {
|
||||
Button {
|
||||
Task { await deleteSource(src) }
|
||||
} label: {
|
||||
Image("icon-trash").resizable().scaledToFit().frame(width: 14, height: 14).foregroundColor(Color.zxF03)
|
||||
Image("icon-trash").resizable().scaledToFit().frame(width: 16, height: 16).foregroundColor(Color.zxF03)
|
||||
}
|
||||
}
|
||||
.padding(12).background(Color.zxFill003).clipShape(RoundedRectangle(cornerRadius: 14))
|
||||
@ -759,7 +759,7 @@ struct ImportPage: View {
|
||||
|
||||
struct ZXImportRow: View { let icon: String; let title: String; let desc: String
|
||||
var body: some View { HStack(spacing: 14) { Image(systemName: icon).font(.system(size: 22)).foregroundColor(Color.zxPurple).frame(width: 48, height: 48)
|
||||
; 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("icon-chevron-right").resizable().scaledToFit().frame(width: 12, height: 12).foregroundColor(Color.zxF03) }.padding(16).background(Color.zxFill003).clipShape(RoundedRectangle(cornerRadius: 16)).overlay(RoundedRectangle(cornerRadius: 16).stroke(Color.zxBorder006, lineWidth: 1)) }
|
||||
; 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("icon-chevron-right").resizable().scaledToFit().frame(width: 16, height: 16).foregroundColor(Color.zxF03) }.padding(16).background(Color.zxFill003).clipShape(RoundedRectangle(cornerRadius: 16)).overlay(RoundedRectangle(cornerRadius: 16).stroke(Color.zxBorder006, lineWidth: 1)) }
|
||||
}
|
||||
|
||||
// MARK: - Import Review
|
||||
|
||||
@ -80,7 +80,7 @@ struct ProfileView: View {
|
||||
Text(profile?.nickname ?? "学习者").font(.system(size: 20, weight: .bold)).foregroundColor(Color.zxF0)
|
||||
Text(profile?.email ?? "").font(.system(size: 12)).foregroundColor(Color.zxF04)
|
||||
}
|
||||
Spacer(); Image("icon-chevron-right").resizable().scaledToFit().frame(width: 14, height: 14).foregroundColor(Color.zxF03)
|
||||
Spacer(); Image("icon-chevron-right").resizable().scaledToFit().frame(width: 16, height: 16).foregroundColor(Color.zxF03)
|
||||
}
|
||||
HStack(spacing: 0) { ZXProfileStat(value: "\(viewModel.summary?.activeDays ?? 0)", label: "活跃天", color: Color.zxOrange); ZXProfileStat(value: "\(viewModel.summary?.totalCardsReviewed ?? 0)", label: "复习卡片", color: Color.zxPurple); ZXProfileStat(value: "\(viewModel.summary?.totalMinutes ?? 0)", label: "分钟", color: Color.zxTeal) }
|
||||
}.padding(20).background(ZXGradient.profileCard).overlay(RoundedRectangle(cornerRadius: 20).stroke(Color(hex: "#7C6EFA", opacity: 0.2), lineWidth: 1)).clipShape(RoundedRectangle(cornerRadius: 20))
|
||||
@ -94,32 +94,32 @@ struct ProfileView: View {
|
||||
VStack(spacing: 0) {
|
||||
NavigationLink(value: Route.libraryCreate) {
|
||||
HStack {
|
||||
Image(systemName: "books.vertical.fill").font(.system(size: 18)).foregroundColor(Color.zxPurple).frame(width: 36, height: 36)
|
||||
Image(systemName: "books.vertical.fill").resizable().scaledToFit().frame(width: 20, height: 20).foregroundColor(Color.zxF05)
|
||||
|
||||
Text("学习资产").font(.system(size: 14, weight: .semibold)).foregroundColor(Color.zxF0)
|
||||
Spacer()
|
||||
Text("\(viewModel.kbCount)库 \(viewModel.itemCount)项 \(viewModel.cardCount)卡").font(.system(size: 12)).foregroundColor(Color.zxF04)
|
||||
Image("icon-chevron-right").resizable().scaledToFit().frame(width: 12, height: 12).foregroundColor(Color.zxF03)
|
||||
Image("icon-chevron-right").resizable().scaledToFit().frame(width: 16, height: 16).foregroundColor(Color.zxF03)
|
||||
}.padding(.horizontal, 16).padding(.vertical, 14)
|
||||
}.foregroundColor(.primary)
|
||||
ZXProfileDivider()
|
||||
NavigationLink(value: Route.notificationList) {
|
||||
HStack {
|
||||
Image(systemName: "bell.fill").font(.system(size: 18)).foregroundColor(Color.zxOrange).frame(width: 36, height: 36)
|
||||
Image(systemName: "bell.fill").resizable().scaledToFit().frame(width: 20, height: 20).foregroundColor(Color.zxF05)
|
||||
|
||||
Text("消息中心").font(.system(size: 14, weight: .semibold)).foregroundColor(Color.zxF0)
|
||||
Spacer(); Image("icon-chevron-right").resizable().scaledToFit().frame(width: 12, height: 12).foregroundColor(Color.zxF03)
|
||||
Spacer(); Image("icon-chevron-right").resizable().scaledToFit().frame(width: 16, height: 16).foregroundColor(Color.zxF03)
|
||||
}.padding(.horizontal, 16).padding(.vertical, 14)
|
||||
}.foregroundColor(.primary)
|
||||
ZXProfileDivider()
|
||||
HStack {
|
||||
Image(systemName: "externaldrive.fill").font(.system(size: 18)).foregroundColor(Color.zxTeal).frame(width: 36, height: 36)
|
||||
Image(systemName: "externaldrive.fill").resizable().scaledToFit().frame(width: 20, height: 20).foregroundColor(Color.zxF05)
|
||||
|
||||
VStack(alignment: .leading, spacing: 2) {
|
||||
Text("存储空间").font(.system(size: 14, weight: .semibold)).foregroundColor(Color.zxF0)
|
||||
Text(viewModel.formattedStorage).font(.system(size: 11)).foregroundColor(Color.zxF04)
|
||||
}
|
||||
Spacer(); Image("icon-chevron-right").resizable().scaledToFit().frame(width: 12, height: 12).foregroundColor(Color.zxF03)
|
||||
Spacer(); Image("icon-chevron-right").resizable().scaledToFit().frame(width: 16, height: 16).foregroundColor(Color.zxF03)
|
||||
}.padding(.horizontal, 16).padding(.vertical, 14)
|
||||
}.background(Color.zxFill004).clipShape(RoundedRectangle(cornerRadius: 20)).overlay(RoundedRectangle(cornerRadius: 20).stroke(Color.zxBorder006, lineWidth: 1))
|
||||
}
|
||||
@ -129,7 +129,7 @@ struct ZXProfileStat: View { let v: String; let l: String; let c: Color; var bod
|
||||
init(value: String, label: String, color: Color) { self.v = value; self.l = label; self.c = color }
|
||||
}
|
||||
struct ZXProfileMenuRow: View { let icon: String; let title: String; let desc: String
|
||||
var body: some View { HStack(spacing: 12) { Image(systemName: icon).font(.system(size: 18)).foregroundColor(Color.zxF05).frame(width: 36, height: 36).background(Color.zxFill006).clipShape(RoundedRectangle(cornerRadius: 10)); VStack(alignment: .leading, spacing: 2) { Text(title).font(.system(size: 14, weight: .semibold)).foregroundColor(Color.zxF0); Text(desc).font(.system(size: 11)).foregroundColor(Color.zxF03) }; Spacer(); Image("icon-chevron-right").resizable().scaledToFit().frame(width: 12, height: 12).foregroundColor(Color.zxF03) }.padding(.horizontal, 16).padding(.vertical, 14).accessibilityLabel("\(title):\(desc)") }
|
||||
var body: some View { HStack(spacing: 12) { Image(systemName: icon).font(.system(size: 18)).foregroundColor(Color.zxF05).frame(width: 36, height: 36).background(Color.zxFill006).clipShape(RoundedRectangle(cornerRadius: 10)); VStack(alignment: .leading, spacing: 2) { Text(title).font(.system(size: 14, weight: .semibold)).foregroundColor(Color.zxF0); Text(desc).font(.system(size: 11)).foregroundColor(Color.zxF03) }; Spacer(); Image("icon-chevron-right").resizable().scaledToFit().frame(width: 16, height: 16).foregroundColor(Color.zxF03) }.padding(.horizontal, 16).padding(.vertical, 14).accessibilityLabel("\(title):\(desc)") }
|
||||
}
|
||||
struct ZXProfileDivider: View {
|
||||
var body: some View { Rectangle().fill(Color.zxBorder008).frame(height: 1).padding(.leading, 64) }
|
||||
|
||||
@ -163,7 +163,7 @@ struct ZXSettingRow: View {
|
||||
Text(title).font(.system(size: 14, weight: .semibold)).foregroundColor(Color.zxF0)
|
||||
Spacer()
|
||||
if !value.isEmpty { Text(value).font(.system(size: 13)).foregroundColor(Color.zxF03) }
|
||||
Image("icon-chevron-right").resizable().scaledToFit().frame(width: 12, height: 12).foregroundColor(Color.zxF03)
|
||||
Image("icon-chevron-right").resizable().scaledToFit().frame(width: 16, height: 16).foregroundColor(Color.zxF03)
|
||||
}.padding(.horizontal, 16).padding(.vertical, 14)
|
||||
}
|
||||
}
|
||||
|
||||
@ -38,7 +38,7 @@ struct QuizListView: View {
|
||||
ForEach(quizzes) { q in
|
||||
NavigationLink(value: Route.quizTake(quizId: q.id)) {
|
||||
VStack(alignment: .leading, spacing: 8) {
|
||||
HStack { Text(q.title ?? "测验").font(.system(size: 15, weight: .semibold)).foregroundColor(Color.zxF0); Spacer(); Image("icon-chevron-right").resizable().scaledToFit().frame(width: 12, height: 12).foregroundColor(Color.zxF03) }
|
||||
HStack { Text(q.title ?? "测验").font(.system(size: 15, weight: .semibold)).foregroundColor(Color.zxF0); Spacer(); Image("icon-chevron-right").resizable().scaledToFit().frame(width: 16, height: 16).foregroundColor(Color.zxF03) }
|
||||
HStack(spacing: 12) {
|
||||
Label("\(q.questionCount ?? 0) 题", systemImage: "list.bullet").font(.system(size: 11)).foregroundColor(Color.zxF04)
|
||||
Label("选择题/判断/填空", systemImage: "square.grid.3x3").font(.system(size: 11)).foregroundColor(Color.zxF04)
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user