On iOS/iPadOS 27 Beta 5 (24A5408d), I can consistently reproduce SwiftUI
Button actions being ignored when the buttons are placed inside a horizontal
ScrollView near the top of a view. This occurs on physical iPhone and iPad
devices and on an iPhone 16 Simulator. Equivalent UI was reliable on the
preceding beta.
Minimal shape:
struct ContentView: View {
@State private var selection = "All"
var body: some View {
NavigationStack {
VStack(spacing: 0) {
ScrollView(.horizontal, showsIndicators: false) {
HStack {
ForEach(["All", "Food", "Transport"], id: \.self) { item in
Button(item) {
selection = item
}
.padding()
}
}
}
Text("Selected: \(selection)")
Button("Control below") { selection = "Control" }
Spacer()
}
.navigationTitle("Touch Hit-Test Repro")
.navigationBarTitleDisplayMode(.inline)
}
}
}
The standalone reproducer includes an XCUITest comparison. Results on the iOS 27 Beta 5 iPhone 16 Simulator:
- Horizontal
ScrollView: fails; the chip is reported as hittable buttap()does not invoke its action. - Remove
.searchable: still fails. - Remove the sheet: still fails.
- Remove only the horizontal
ScrollView: passes. - Tap a normal button below the strip: passes.
Final result: 3 failed, 2 passed. This points to a Beta 5 hit-testing or gesture
arbitration regression involving Button inside a horizontal ScrollView,
rather than application state or a transparent overlay.
Feedback filed: FB24307724
Has anyone found a framework-level workaround that preserves both native button semantics and horizontal scrolling? Related historical reports include https://developer.apple.com/forums/thread/763436 and https://developer.apple.com/forums/thread/794212.