checkpoint: v3.0.1 — 容器显示样式,Flat/Container 切换,Settings General 首行 Radio 选择
3 files modified
67 ■■■■■ changed files
Apptag/ApptagApp.swift 15 ●●●●● patch | view | raw | blame | history
Apptag/ContentView.swift 50 ●●●●● patch | view | raw | blame | history
Apptag/Info.plist 2 ●●● patch | view | raw | blame | history
Apptag/ApptagApp.swift
@@ -319,6 +319,7 @@
    @AppStorage("iconSize") private var iconSize: Double = 56
    @AppStorage("tagPosition") private var tagPosition = "left"
    @AppStorage("defaultGroupName") private var defaultGroupName = "Other"
    @AppStorage("displayMode") private var displayMode = "flat"
    @State private var allApps: [AppInfo] = []
    @State private var tagColors: [String: Int] = [:]
@@ -385,6 +386,20 @@
            // Tab 1: General
            Form {
                Section {
                    LabeledContent("App list style:") {
                        Picker("", selection: $displayMode) {
                            Text("Flat").tag("flat")
                            Text("Container").tag("container")
                        }
                        .pickerStyle(.segmented)
                        .frame(width: 210)
                    }
                    Text("\"Flat\" shows apps directly. \"Container\" wraps each tag group in a rounded box.")
                        .font(.caption)
                        .foregroundStyle(.secondary)
                }
                Section {
                    LabeledContent("Tag position:") {
                        Picker("", selection: $tagPosition) {
                            Text("Left").tag("left")
Apptag/ContentView.swift
@@ -211,6 +211,7 @@
    @AppStorage("iconSize") private var iconSize: Double = 56
    @AppStorage("tagPosition") private var tagPosition = "left"
    @State private var notchHeight: CGFloat = 0
    @AppStorage("displayMode") private var displayMode = "flat"
    private var isSideLayout: Bool {
        tagPosition == "left" || tagPosition == "right"
@@ -364,7 +365,15 @@
                Spacer()
                ProgressView().scaleEffect(0.8)
                Spacer()
            } else if displayMode == "container" {
                containerGrid
            } else {
                flatGrid
            }
        }
    }
    private var flatGrid: some View {
                ScrollViewReader { proxy in
                    ScrollView {
                        LazyVStack(alignment: .leading, spacing: 24) {
@@ -380,6 +389,47 @@
                    }.onAppear { scrollProxy = proxy }
                }
            }
    private var containerGrid: some View {
        let minContainerWidth: CGFloat = max(iconSize * 3 + 100, 300)
        let columns = [GridItem(.adaptive(minimum: minContainerWidth, maximum: minContainerWidth * 1.5), spacing: 16)]
        return ScrollView {
            LazyVGrid(columns: columns, alignment: .leading, spacing: 16) {
                ForEach(groups) { group in
                    VStack(alignment: .leading, spacing: 6) {
                        // Group header
                        HStack(spacing: 0) {
                            Rectangle().fill(.secondary.opacity(0.25)).frame(height: 1)
                            Text(group.name)
                                .font(.system(size: tagFontSize, weight: .semibold))
                                .foregroundStyle(.secondary)
                                .padding(.horizontal, 10)
                            Rectangle().fill(.secondary.opacity(0.25)).frame(height: 1)
                        }
                        // App grid
                        let itemSize = iconSize + 28
                        LazyVGrid(
                            columns: [GridItem(.adaptive(minimum: itemSize, maximum: itemSize + 36), spacing: 6)],
                            spacing: 2
                        ) {
                            ForEach(group.apps) { app in
                                AppGridItem(app: app, iconSize: iconSize, onSelect: { openApp(app) })
                            }
                        }
                    }
                    .id(group.id)
                    .padding(16)
                    .background(
                        RoundedRectangle(cornerRadius: 14)
                            .fill(.ultraThinMaterial)
                    )
                    .overlay(
                        RoundedRectangle(cornerRadius: 14)
                            .stroke(Color.primary.opacity(0.08), lineWidth: 1)
                    )
                }
            }
            .padding(20)
        }
    }
Apptag/Info.plist
@@ -19,7 +19,7 @@
    <key>CFBundlePackageType</key>
    <string>APPL</string>
    <key>CFBundleShortVersionString</key>
    <string>2.0.2</string>
    <string>3.0.1</string>
    <key>CFBundleVersion</key>
    <string>1</string>
    <key>LSMinimumSystemVersion</key>