Application Hangs with Nested LazyVStack When Accessibility Inspector is Active

Description

I've encountered a consistent hang/freeze issue in SwiftUI applications when using nested LazyVStack containers with Accessibility Inspector (simulator) or VoiceOver (physical device) enabled. The application becomes completely unresponsive and must be force-quit.

Importantly, this hang occurs in a minimal SwiftUI project with no third-party dependencies, suggesting this is a framework-level issue with the interaction between SwiftUI's lazy view lifecycle and the accessibility system.

Reproduction Steps

I've created a minimal reproduction project available here: https://github.com/pendo-io/SwiftUI_Hang_Reproduction

To Reproduce:

  1. Create a SwiftUI view with the following nested LazyVStack structure:
struct NestedLazyVStackView: View {
    @State private var outerSections: [Int] = []
    @State private var innerRows: [Int: [Int]] = [:]
    
    var body: some View {
        ScrollView {
            LazyVStack(alignment: .leading, spacing: 24) {
                ForEach(outerSections, id: \.self) { section in
                    VStack(alignment: .leading, spacing: 8) {
                        Text("Section #\(section)")
                        
                        // Nested LazyVStack
                        LazyVStack(alignment: .leading, spacing: 2) {
                            ForEach(innerRows[section] ?? [], id: \.self) { row in
                                Text("Section #\(section) - Row #\(row)")
                                    .onAppear {
                                        // Load more data when row appears
                                        loadMoreInner(section: section)
                                    }
                            }
                        }
                    }
                    .onAppear {
                        // Load more sections when section appears
                        loadMoreOuter()
                    }
                }
            }
        }
    }
}
  1. Enable Accessibility Inspector in iOS Simulator:

    • Xcode → Open Developer Tool → Accessibility Inspector
    • Select your running simulator
    • Enable Inspection mode (eye icon)
  2. Navigate to the view and start scrolling

  3. Result: The application hangs and becomes unresponsive within a few seconds of scrolling

Expected Behavior

The application should remain responsive when Accessibility Inspector or VoiceOver is enabled, allowing users to scroll through nested lazy containers without freezing.

Actual Behavior

  • The application freezes/hangs completely
  • CPU usage may spike
  • The app must be force-quit to recover
  • The hang occurs consistently and is reproducible

Workaround 1: Replace inner LazyVStack with VStack

LazyVStack {
    ForEach(...) { section in
        VStack {  // ← Changed from LazyVStack
            ForEach(...) { row in
                ...
            }
        }
    }
}

Workaround 2: Embed in TabView

TabView {
    NavigationStack {
        NestedLazyVStackView()  // ← Same nested structure, but no hang
    }
    .tabItem { ... }
}

Interestingly, wrapping the entire navigation stack in a TabView prevents the hang entirely, even with the nested LazyVStack structure intact.

Questions for Apple

  1. Is there a known issue with nested LazyVStack containers and accessibility traversal?
  2. Why does wrapping the view in a TabView prevent the hang?
  3. Are there recommended patterns for using nested lazy containers with accessibility support?
  4. Is this a timing issue, a deadlock, or an infinite loop in the accessibility system?
  5. Why that happens?

Reproduction Project

A complete, minimal reproduction project is available at: https://github.com/pendo-io/SwiftUI_Hang_Reproduction

Hello @mike sldkcjnsdmhvbsdh

Thank you for documenting and providing workarounds.

I am able to reproduce this issue and would like you to file a Bug Report. After that, please reply with the FB number in this thread. I will make sure it is seen by the relevant engineering team.

In the report, I recommend sending the project as an attachment, we often look for attachments, and feel free to also include the GitHub link as your documentation is beyond helpful to us in our investigation and others who may run into this issue.

If you have any questions about filing a bug report, take a look at Bug Reporting: How and Why?

Thank you!

 Travis Trotto - DTS Engineer

@DTS Engineer

We have just submitted: FB21851974

Thanks

Application Hangs with Nested LazyVStack When Accessibility Inspector is Active
 
 
Q