[WIP] Adopt iOS 26 Liquid Glass across the app - #108
Conversation
- Bump minimum deployment target to iOS 26.0 - Remove the global opaque-white UINavigationBarAppearance so native glass navigation bars render everywhere; system back buttons replace the custom BackButton on most screens (app-wide resellPurple tint) - Replace the custom tab bar with a native TabView: floating glass bar, SF Symbol tabs, native unread badge, minimize-on-scroll - Tab-root toolbars (wordmark/search/bell, Messages title, settings/ calendar) are defined on the TabView switching on selection, since items inside non-initial tabs don't propagate to the nav bar - PurpleButton/NavigationPurpleButton become .glassProminent tinted CTAs - ExpandableAddButton is a tinted glass FAB whose options morph via GlassEffectContainer + glassEffectID; it drops into the freed corner when the tab bar minimizes and rises when it expands, driven by a shared scroll-breakpoint state machine in MainViewModel (including manual pill-tap expansion detected by a passive window tap observer) - Messages: floating glass input bar (photo/field/send + action chips) via safeAreaInset; native glass toolbar; native Menu replaces the custom options overlay on posts, profiles, and chat - Product details: glass overlay back/ellipsis/save controls, glass page-dot lozenge, native share/report/delete Menu - Sheets: native drag indicators and backgrounds replace hand-drawn handles, presentationBackground(.clear) hacks, and opaque overrides; FilterView's hand-rolled sort popup becomes a native Menu - Search surfaces pinned via safeAreaInset get glass capsules so content scrolls beneath them Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
📝 WalkthroughWalkthroughThe project now targets iOS 26.0 and version 46. Navigation uses native tab bars and system toolbars. Scroll position controls tab-bar minimization. Screens and shared controls adopt Liquid Glass styling, system symbols, safe-area layouts, and native menus. ChangesPlatform settings
Tab navigation and UI
Estimated code review effort: 4 (Complex) | ~45 minutes Sequence Diagram(s)sequenceDiagram
participant HomeView
participant MainViewModel
participant MainTabView
participant TabView
HomeView->>MainViewModel: Report scroll offset
MainViewModel->>MainTabView: Update minimized state
MainTabView->>TabView: Apply tab-bar state
TabView->>MainTabView: Report tab selection
MainTabView->>MainViewModel: Request expansion pulse
🚥 Pre-merge checks | ✅ 3 | ❌ 2❌ Failed checks (2 warnings)
✅ Passed checks (3 passed)
✨ Finishing Touches 💡 1📝 Generate docstrings 💡
🧪 Generate unit tests (beta)
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
There was a problem hiding this comment.
Actionable comments posted: 3
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Inline comments:
In `@Resell/Views/Home/FilterView.swift`:
- Around line 230-234: Update the Button action around
FiltersViewModel.applyFilters so request failures are distinguishable from
successful applications. Propagate the failure or return an explicit success
result, dismissing the filter sheet via isPresented only after success;
otherwise keep it open and display an error to the user.
In `@Resell/Views/Home/SearchView.swift`:
- Around line 33-35: Update the empty-search guard in searchItems to set
searchViewModel.isSearching to false before returning, so a focused field with
no searchText does not continue rendering searchHistoryView; preserve the
existing behavior for non-empty submissions.
In `@Resell/Views/MainTabView.swift`:
- Around line 270-279: Update TapObserverUIView.didMoveToWindow to remove the
existing recognizer from its previous UIWindow when the view leaves or changes
windows, then clear recognizer before returning; also remove and clear the
recognizer in dismantleUIView so SwiftUI teardown cannot leave stale or
duplicate window gestures.
🪄 Autofix
Fix all unresolved CodeRabbit comments on this PR:
- Push a commit to this branch (recommended)
- Create a new PR with the fixes
ℹ️ Review info
⚙️ Run configuration
Configuration used: defaults
Review profile: CHILL
Plan: Pro Plus
Run ID: 51973469-52fe-457a-a768-aaf398f88f80
📒 Files selected for processing (35)
Resell.xcodeproj/project.pbxprojResell/ViewModels/MainViewModel.swiftResell/Views/Chats/ChatsView.swiftResell/Views/Chats/MessagesView.swiftResell/Views/Components/BackButton.swiftResell/Views/Components/CustomPageControlIndicatorView.swiftResell/Views/Components/ExpandableAddButton.swiftResell/Views/Components/OptionsMenuView.swiftResell/Views/Components/PaginatedImageView.swiftResell/Views/Components/PurpleButton.swiftResell/Views/Components/SearchBar.swiftResell/Views/Home/DetailedFilterView.swiftResell/Views/Home/FilterView.swiftResell/Views/Home/HomeView.swiftResell/Views/Home/NotificationsView.swiftResell/Views/Home/ProfileView.swiftResell/Views/Home/SavedView.swiftResell/Views/Home/SearchView.swiftResell/Views/MainTabView.swiftResell/Views/MainView.swiftResell/Views/NewListing/NewListingDetailsView.swiftResell/Views/NewListing/NewListingImagesView.swiftResell/Views/NewListing/NewRequestView.swiftResell/Views/ProductDetails/CompletedTransactionView.swiftResell/Views/ProductDetails/ExternalProfileView.swiftResell/Views/ProductDetails/FollowListView.swiftResell/Views/ProductDetails/ProductDetailsView.swiftResell/Views/Report/ReportConfirmationView.swiftResell/Views/Report/ReportDetailsView.swiftResell/Views/Report/ReportOptionsView.swiftResell/Views/Settings/AvailabilitySettingsView.swiftResell/Views/Settings/BlockedUsersView.swiftResell/Views/Settings/EditProfileView.swiftResell/Views/Settings/SendFeedbackView.swiftResell/Views/Settings/SettingsView.swift
💤 Files with no reviewable changes (11)
- Resell/Views/Report/ReportOptionsView.swift
- Resell/Views/Home/NotificationsView.swift
- Resell/Views/Settings/AvailabilitySettingsView.swift
- Resell/Views/Report/ReportDetailsView.swift
- Resell/Views/ProductDetails/CompletedTransactionView.swift
- Resell/Views/Settings/SendFeedbackView.swift
- Resell/Views/Home/SavedView.swift
- Resell/Views/Settings/BlockedUsersView.swift
- Resell/Views/Settings/SettingsView.swift
- Resell/Views/Settings/EditProfileView.swift
- Resell/Views/Components/BackButton.swift
04059d5 to
ebaf9b3
Compare
Overview
Summary by CodeRabbit