Bug
After the v1.5.0 Logs redesign, the horizontal swipe gesture for switching between Activity and Log was lost. The segmented picker still works, but users could no longer swipe.
Root cause
The redesign replaced the TabView(.page) paging container with a plain switch to fix two visual regressions that PageTabViewStyle introduced once the tab bar was hidden:
- The navigation bar lost its scroll-edge transparency and stayed opaque, because UIKit binds the nav-bar effect to the outermost
UIScrollView — which with TabView(.page) is the horizontal pager that never scrolls vertically.
- A white seam appeared at the bottom from the page TabView's reserved (but invisible) index-dot strip, no longer masked by the tab bar.
The switch fixed the visuals but removed the swipe.
Fix
Replace the switch with a native iOS 17+ horizontal paging ScrollView:
ScrollView(.horizontal) + LazyHStack + .scrollTargetBehavior(.paging) + .scrollPosition(id:) bound two-way to mode.
- Each page is sized via
GeometryReader so the inner List respects the navigation bar's safe-area inset.
- No
UIPageViewController, so no opaque toolbar and no bottom seam.
Acceptance
Bug
After the v1.5.0 Logs redesign, the horizontal swipe gesture for switching between Activity and Log was lost. The segmented picker still works, but users could no longer swipe.
Root cause
The redesign replaced the
TabView(.page)paging container with a plainswitchto fix two visual regressions thatPageTabViewStyleintroduced once the tab bar was hidden:UIScrollView— which withTabView(.page)is the horizontal pager that never scrolls vertically.The
switchfixed the visuals but removed the swipe.Fix
Replace the
switchwith a native iOS 17+ horizontal pagingScrollView:ScrollView(.horizontal) + LazyHStack + .scrollTargetBehavior(.paging) + .scrollPosition(id:)bound two-way tomode.GeometryReaderso the innerListrespects the navigation bar's safe-area inset.UIPageViewController, so no opaque toolbar and no bottom seam.Acceptance