UICollectionView list: leading swipe overshoots in expanded split view for .plain/.grouped; .insetGrouped OK (iPadOS 26 b5–b8) [FB19785883]

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

  1. Launch the sample; ensure the split is expanded (isCollapsed == false).
  2. In the secondary list, set Appearance = Plain (also repros with Grouped).
  3. 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.
  4. 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())
]
UICollectionView list: leading swipe overshoots in expanded split view for .plain/.grouped; .insetGrouped OK (iPadOS 26 b5–b8) [FB19785883]
 
 
Q