Hi all, Sharing a reproducible UIKit issue I’m seeing across multiple iPadOS 26 betas, with a tiny sample attached and a short video.
Short video
https://youtu.be/QekYNnHsfYk
Tiny project
https://github.com/yoasha/ListSwipeOvershootReproSwift
Summary
In a UISplitViewController (.doubleColumn), a UICollectionView using list layout shows a large leading-swipe overshoot when the split view is expanded (isCollapsed == false). The cell content translates roughly 3–4× the action width.
- Repros with appearance = .plain and .grouped
- Does not repro with .insetGrouped
- Independent of trailing provider (issue persists when trailing provider is nil)
- Collapsed split (compact width) behaves correctly
Environment
- Devices: iPad Air (3rd gen), iPadOS 26.0 (23A5326a) → Repro
- Simulators: iPad Pro 11-inch (M4), iPadOS 26.0 beta 6 → Repro
- Also tested on device: iPadOS 26 beta 5, 6, 7, 8
- Xcode: 26.0 beta 6 (17A5305f)
Steps to reproduce
- Launch the sample; ensure the split is expanded (isCollapsed == false).
- In the secondary list, set Appearance = Plain (also repros with Grouped).
- Perform a leading swipe (LTR: swipe right) on any row.
- Actual: content shifts ~3–4× the action width (overshoot).
- Expected: content translates exactly the action width.
- Switch Appearance = InsetGrouped and repeat the leading (swipe right) gesture → correct (no overshoot).
Feedback Assistant
- FB ID: FB19785883 (full report + attachments filed; this forum thread mirrors the repro for wider visibility)
Minimal code (core of the sample) If anyone from Apple needs additional traces or a sysdiagnose, I can attach promptly. Thanks!
// Secondary column VC (snippet)
var cfg = UICollectionLayoutListConfiguration(appearance: .plain) // also .grouped / .insetGrouped
cfg.showsSeparators = true
cfg.headerMode = .none
cfg.leadingSwipeActionsConfigurationProvider = { _ in
let read = UIContextualAction(style: .normal, title: "Read") { _,_,done in done(true) }
read.backgroundColor = .systemBlue
let s = UISwipeActionsConfiguration(actions: [read])
s.performsFirstActionWithFullSwipe = false
return s
}
// Trailing provider can be nil and the bug still repros for leading swipe:
cfg.trailingSwipeActionsConfigurationProvider = nil
let layout = UICollectionViewCompositionalLayout.list(using: cfg)
let collectionView = UICollectionView(frame: view.bounds, collectionViewLayout: layout)
// … standard data source with UICollectionViewListCell + UIListContentConfiguration
// Split setup (snippet)
let split = UISplitViewController(style: .doubleColumn)
split.preferredDisplayMode = .oneBesideSecondary
split.viewControllers = [
UINavigationController(rootViewController: PrimaryTableViewController()),
UINavigationController(rootViewController: SecondaryListViewController())
]