I'm seeing a delayed appearance change when moving a row between two collections using the new SwiftUI reordering APIs. The data updates immediately, but the dragged row retains its source appearance throughout settling, then abruptly switches to its destination appearance about 0.9 seconds after the move callback.
- Xcode 27.0 (27A266a), macOS 26.7 (25G229)
- iOS Simulator 27.0 (24A434), iPhone 17 Pro
- Feedback: FB25054984
These observations are from the original simulator tests. I haven't established whether the same behavior occurs on a physical device or a newer runtime.
The hierarchy is a ScrollView containing a LazyVStack with sections. Each section uses ForEach(...).reorderable(collectionID:), under one .reorderContainer(for:in:move:). A dragContainer supplies transferable items, with DragConfiguration(allowMove: true).
The same item has a compact appearance inside a group and a wider card appearance when standalone. Moving it between those collections updates membership, order, and the state driving its appearance synchronously in the move callback. Item IDs remain stable.
- Drag a compact grouped row into the standalone collection.
- Drop it between two standalone rows.
- The model and live presentation state update immediately.
- The dropped row keeps the source appearance during settling, then snaps to the destination appearance approximately 0.9 seconds later.
- Moving it back shows the same behavior. Different row heights also cause adjacent rows to step when the appearance changes.
Measured delays in the application's synthetic-data sandbox were approximately 930 ms out and 921 ms back in.
- Removing role-dependent content identity.
- Moving into an already populated destination collection.
- Giving source and destination rows equal occupied height.
- Using identity transitions.
- Bypassing the app's drawer modifier.
None removed the late appearance switch. Equal occupied height removed the displacement of adjacent rows, but not the delayed visual change. A comparison using custom drop handling updated the appearance promptly, but did not preserve native insertion-position reordering.
The feedback contains the original video, relevant logs and before/after frames. I also have a reduced standalone project that builds, but its manual drag-and-drop reproduction hasn't yet been verified; the timings above are from the application's sandbox, not that standalone sample.
- Is retaining the source row's appearance until after settling expected when moving between collections?
- Is there a supported API or recommended row structure that lets the destination appearance and geometry participate in the settling animation?
- Has anyone reproduced this on iOS 27, or found it fixed in a newer runtime?
I'd like to keep native reordering without timed refreshes, container identity resets, or private APIs.