Close Menu
geekfence.comgeekfence.com
    What's Hot

    ClickFix attackers using new tactic to evade detection, says Microsoft – Computerworld

    March 7, 2026

    M&A Monthly: February/March 2026

    March 7, 2026

    Posit AI Blog: luz 0.4.0

    March 7, 2026
    Facebook X (Twitter) Instagram
    • About Us
    • Contact Us
    Facebook Instagram
    geekfence.comgeekfence.com
    • Home
    • UK Tech News
    • AI
    • Big Data
    • Cyber Security
      • Cloud Computing
      • iOS Development
    • IoT
    • Mobile
    • Software
      • Software Development
      • Software Engineering
    • Technology
      • Green Technology
      • Nanotechnology
    • Telecom
    geekfence.comgeekfence.com
    Home»iOS Development»SwiftUI TabView (.page / PageTabViewStyle) selection can get out of sync when user interrupts a programmatic page change
    iOS Development

    SwiftUI TabView (.page / PageTabViewStyle) selection can get out of sync when user interrupts a programmatic page change

    AdminBy AdminFebruary 9, 2026No Comments2 Mins Read2 Views
    Facebook Twitter Pinterest LinkedIn Telegram Tumblr Email
    SwiftUI TabView (.page / PageTabViewStyle) selection can get out of sync when user interrupts a programmatic page change
    Share
    Facebook Twitter LinkedIn Pinterest Email


    SwiftUI TabView with .page style seems to allow user interaction to interrupt an in-flight page transition, leaving the UI in an inconsistent state.

    Expected: the visible page always matches the bound selection.
    Observed: if the user taps/drags the pager during a programmatic page change, the bound selection updates, but the visible page can remain the previous one. After that, subsequent page changes can “jump” (e.g. two pages at a time), because the visual page and selection have diverged.

    Here is a GIF showing the issue:

    SwiftUI TabView (.page / PageTabViewStyle) selection can get out of sync when user interrupts a programmatic page change

    In the GIF, I start with selection = 5 and page “Page 5” visible. I tap Prev and then interact with the pager mid-transition. The visible page remains “Page 5”, but the model has updated (selection = 4). Tapping Prev again then animates two pages to reach “Page 3”, which suggests the pager’s internal state is now out of sync with the binding.

    Repro steps:

    1. Run the minimum reproducible example below.
    2. Tap Prev or Next to change selection.
    3. While the page transition is still in progress, quickly tap/drag on the pager.
    4. Observe that selection changes but the visible page sometimes does not.

    Minimum reproducible example

    struct Page: View {
        let index: Int
    
        var body: some View {
            ZStack {
                RoundedRectangle(cornerRadius: 24)
                    .fill(Color(white: 0.92))
                    .padding(24)
    
                Text("Page \(index)")
                    .font(.system(size: 48, weight: .bold, design: .rounded))
            }
        }
    }
    
    struct PagerDesyncReproView: View {
        @State private var selection: Int = 0
        private let pageCount = 6
    
        var body: some View {
            VStack(spacing: 0) {
                HStack(spacing: 12) {
                    Button("Prev") {
                        guard selection > 0 else { return }
                        selection -= 1
                    }
                    .buttonStyle(.bordered)
    
                    Button("Next") {
                        guard selection < pageCount - 1 else { return }
                        selection += 1
                    }
                    .buttonStyle(.borderedProminent)
    
                    Spacer()
    
                    Text("selection = \(selection)")
                        .font(.system(.caption, design: .monospaced))
                        .foregroundStyle(.secondary)
                }
                .padding(.horizontal)
    
                TabView(selection: $selection) {
                    ForEach(0..<pageCount, id: \.self) { i in
                        Page(index: i)
                            .tag(i)
                    }
                }
                .animation(.default, value: selection)
                .transition(.slide)
                .tabViewStyle(.page(indexDisplayMode: .always))
                .frame(maxWidth: .infinity, maxHeight: .infinity)
            }
        }
    }
    

    Is there a supported way to prevent this desynchronization (e.g. disable interaction until the page transition completes), or to detect cancellation/completion of the page transition so the binding can be kept consistent?



    Source link

    Share. Facebook Twitter Pinterest LinkedIn Tumblr Email

    Related Posts

    I wish I could be an OpenClaw Maintainer

    March 7, 2026

    Swift factory method design pattern

    March 6, 2026

    react native – How to solve “”xcodebuild” exited with error code 65.“ – error from npx expo run:ios?

    March 5, 2026

    Post | Cocoanetics

    March 1, 2026

    Swift abstract factory design pattern

    February 28, 2026

    Flutter: Force portrait UI on tablets (iOS + Android) even when device is landscape, but avoid letterboxing / black bars

    February 27, 2026
    Top Posts

    Hard-braking events as indicators of road segment crash risk

    January 14, 202619 Views

    Understanding U-Net Architecture in Deep Learning

    November 25, 202518 Views

    How to integrate a graph database into your RAG pipeline

    February 8, 202610 Views
    Don't Miss

    ClickFix attackers using new tactic to evade detection, says Microsoft – Computerworld

    March 7, 2026

    “And all Windows computers should already be restricted so that random, unsigned (not signed by…

    M&A Monthly: February/March 2026

    March 7, 2026

    Posit AI Blog: luz 0.4.0

    March 7, 2026

    Top Reasons to Choose Precisely for SAP and Salesforce Process Automation

    March 7, 2026
    Stay In Touch
    • Facebook
    • Instagram
    About Us

    At GeekFence, we are a team of tech-enthusiasts, industry watchers and content creators who believe that technology isn’t just about gadgets—it’s about how innovation transforms our lives, work and society. We’ve come together to build a place where readers, thinkers and industry insiders can converge to explore what’s next in tech.

    Our Picks

    ClickFix attackers using new tactic to evade detection, says Microsoft – Computerworld

    March 7, 2026

    M&A Monthly: February/March 2026

    March 7, 2026

    Subscribe to Updates

    Please enable JavaScript in your browser to complete this form.
    Loading
    • About Us
    • Contact Us
    • Disclaimer
    • Privacy Policy
    • Terms and Conditions
    © 2026 Geekfence.All Rigt Reserved.

    Type above and press Enter to search. Press Esc to cancel.