From 76df237473bf3dc0b8941ca7e747c192ad1d9e81 Mon Sep 17 00:00:00 2001 From: Krishna Kumar Date: Mon, 27 Jul 2026 14:04:22 -0500 Subject: [PATCH] Stop paperSurface() undoing the serif navigation titles MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Only the bookmarks screen had picked up the serif title. Every other screen — Search, Sources, Podcasts, Settings, Ask, the sheets — was still system bold sans, and the reason was paperSurface(): setting .toolbarBackground makes SwiftUI build a fresh UINavigationBarAppearance and discard the one PaperAppearance installed, text attributes included. Bookmarks was the only screen not using the helper, which is why it alone looked right. The modifier no longer sets a toolbar background. It doesn't need one — the bar is transparent by appearance and the screen already paints the paper ground beneath it. Also labels the bookmarks toolbar buttons (Settings, Add bookmark, Unread filter, AI actions), which were bare SF Symbols announcing nothing to VoiceOver. Verified in both schemes: large titles on Bookmarks/Sources/Podcasts/ Search and inline titles on the Settings and Ask sheets all render serif, on paper grounds. Co-Authored-By: Claude Opus 5 (1M context) Claude-Session: https://claude.ai/code/session_01JgLHztZGaEHvS3KNeGQmRM --- Marks/Views/BookmarksView.swift | 4 ++++ Marks/Views/Library/LibraryKit.swift | 11 ++++++++--- 2 files changed, 12 insertions(+), 3 deletions(-) diff --git a/Marks/Views/BookmarksView.swift b/Marks/Views/BookmarksView.swift index 54bacf5..3427c91 100644 --- a/Marks/Views/BookmarksView.swift +++ b/Marks/Views/BookmarksView.swift @@ -122,6 +122,7 @@ struct BookmarksView: View { } label: { Image(systemName: "sparkles") } + .accessibilityLabel("AI actions") } ToolbarItem(placement: .topBarTrailing) { HStack(spacing: 16) { @@ -138,6 +139,7 @@ struct BookmarksView: View { Button { showAddBookmark = true } label: { Image(systemName: "plus") } + .accessibilityLabel("Add bookmark") Button { Task { await viewModel.toggleUnreadFilter() } } label: { @@ -146,9 +148,11 @@ struct BookmarksView: View { : "line.3.horizontal.decrease.circle") .contentTransition(.symbolEffect(.replace)) } + .accessibilityLabel("Unread filter") Button { showSettings = true } label: { Image(systemName: "gearshape") } + .accessibilityLabel("Settings") } } } diff --git a/Marks/Views/Library/LibraryKit.swift b/Marks/Views/Library/LibraryKit.swift index b5da6e8..43e89d6 100644 --- a/Marks/Views/Library/LibraryKit.swift +++ b/Marks/Views/Library/LibraryKit.swift @@ -131,13 +131,18 @@ enum PaperType { extension View { /// Puts a screen on the paper ground: clears the system list/scroll - /// background so the sheet shows through, and tints the bar to match so a - /// large title doesn't sit on a white strip above the content. + /// background so the sheet shows through, and lets the paper reach past the + /// safe area so the bar sits on it. + /// + /// Deliberately no `.toolbarBackground` — setting it makes SwiftUI build a + /// fresh UINavigationBarAppearance and throw away the one PaperAppearance + /// installed, which silently reverted these screens' titles to the system + /// bold sans. The bar is transparent by appearance, so the background + /// below is all it needs. func paperSurface() -> some View { self .scrollContentBackground(.hidden) .background(Paper.sheet.ignoresSafeArea()) - .toolbarBackground(Paper.sheet, for: .navigationBar) } /// Editable text. Monospaced, because in this design anything you type is