瀏覽代碼

Keep History and Dictionary headers fixed while only their content scrolls.

Co-authored-by: Cursor <cursoragent@cursor.com>
AhtashamShahzad1 1 月之前
父節點
當前提交
fb2c6aa68a
共有 2 個文件被更改,包括 35 次插入28 次删除
  1. 19 15
      gramora/Views/DictionaryView.swift
  2. 16 13
      gramora/Views/HistoryView.swift

+ 19 - 15
gramora/Views/DictionaryView.swift

@@ -10,24 +10,28 @@ struct DictionaryView: View {
             let dynamicHorizontalPadding = min(max(proxy.size.width * 0.045, AppTheme.contentPadding), 52)
             let dynamicBottomPadding = min(max(proxy.size.height * 0.06, 28), 56)
 
-            ScrollView(.vertical, showsIndicators: false) {
-                VStack(alignment: .leading, spacing: 0) {
-                    header
-                        .padding(.bottom, 28)
-
-                    contentCard
-                        .padding(.bottom, 24)
-
-                    if viewModel.hasResult {
-                        resultCard
+            VStack(alignment: .leading, spacing: 0) {
+                header
+                    .padding(.bottom, 28)
+
+                ScrollView(.vertical, showsIndicators: false) {
+                    VStack(alignment: .leading, spacing: 0) {
+                        contentCard
+                            .padding(.bottom, 24)
+
+                        if viewModel.hasResult {
+                            resultCard
+                        }
                     }
+                    .padding(.bottom, dynamicBottomPadding)
                 }
-                .frame(maxWidth: 1200, alignment: .topLeading)
-                .frame(maxWidth: .infinity, alignment: .topLeading)
-                .padding(.horizontal, dynamicHorizontalPadding)
-                .padding(.top, AppTheme.brandLabelTopInset)
-                .padding(.bottom, dynamicBottomPadding)
+                .frame(maxWidth: .infinity, maxHeight: .infinity)
             }
+            .frame(maxWidth: 1200, maxHeight: .infinity, alignment: .topLeading)
+            .frame(maxWidth: .infinity, maxHeight: .infinity, alignment: .topLeading)
+            .padding(.horizontal, dynamicHorizontalPadding)
+            .padding(.top, AppTheme.brandLabelTopInset)
+            .padding(.bottom, dynamicBottomPadding)
         }
         .onChange(of: viewModel.query) { newValue in
             if newValue.count > DictionaryViewModel.maxQueryLength {

+ 16 - 13
gramora/Views/HistoryView.swift

@@ -9,27 +9,30 @@ struct HistoryView: View {
             let dynamicHorizontalPadding = min(max(proxy.size.width * 0.045, AppTheme.contentPadding), 52)
             let dynamicBottomPadding = min(max(proxy.size.height * 0.04, 20), 40)
 
-            ScrollView(.vertical, showsIndicators: false) {
-                VStack(alignment: .leading, spacing: 0) {
-                    header
-                        .padding(.bottom, 24)
-
-                    if viewModel.isEmpty {
-                        emptyState
-                    } else {
+            VStack(alignment: .leading, spacing: 0) {
+                header
+                    .padding(.bottom, 24)
+
+                if viewModel.isEmpty {
+                    emptyState
+                        .frame(maxWidth: .infinity, maxHeight: .infinity)
+                } else {
+                    ScrollView(.vertical, showsIndicators: false) {
                         LazyVStack(spacing: 12) {
                             ForEach(viewModel.entries) { entry in
                                 historyRow(entry)
                             }
                         }
+                        .padding(.bottom, dynamicBottomPadding)
                     }
+                    .frame(maxWidth: .infinity, maxHeight: .infinity)
                 }
-                .frame(maxWidth: 900, alignment: .topLeading)
-                .frame(maxWidth: .infinity, alignment: .topLeading)
-                .padding(.horizontal, dynamicHorizontalPadding)
-                .padding(.top, AppTheme.brandLabelTopInset)
-                .padding(.bottom, dynamicBottomPadding)
             }
+            .frame(maxWidth: 900, maxHeight: .infinity, alignment: .topLeading)
+            .frame(maxWidth: .infinity, maxHeight: .infinity, alignment: .topLeading)
+            .padding(.horizontal, dynamicHorizontalPadding)
+            .padding(.top, AppTheme.brandLabelTopInset)
+            .padding(.bottom, dynamicBottomPadding)
         }
         .confirmationDialog(
             "Clear all history?",