Give the trash column a full-height marquee backdrop
The trashed-side gesture surface was sized to the rows' fitted height, so blank column space below the last row couldn't arm a marquee — a dead zone the board side doesn't have (DESIGN/04 > The trash: the column's gesture surface is full height). The rows content now takes maxHeight: .infinity like LaneView's scrollableCards, the identical structure in the identical position, so the band arms from anywhere in the column. Claude-Session: https://claude.ai/code/session_01SR4XGjmBE16ZUYWpfFHXwY
This commit is contained in:
@@ -188,12 +188,21 @@ struct TrashLaneView: View {
|
|||||||
.id(entry.id)
|
.id(entry.id)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
.frame(maxWidth: .infinity, alignment: .topLeading)
|
// `maxHeight: .infinity` here, not just `maxWidth`, is what makes the gesture surface
|
||||||
|
// below reach the column's full height rather than stopping where the last row ends —
|
||||||
|
// the same fix `LaneView.scrollableCards` applies to its masonry, and for the identical
|
||||||
|
// reason: a `ScrollView` proposes its content only the height that content asks for, so a
|
||||||
|
// view sized to fit its rows leaves the blank space beneath them un-hit-testable. "The
|
||||||
|
// column's gesture surface is full height" (04-interactions.md ▸ The trash, settled)
|
||||||
|
// needs that blank space to actually belong to the view the gesture below is on.
|
||||||
|
.frame(maxWidth: .infinity, maxHeight: .infinity, alignment: .topLeading)
|
||||||
.padding(6)
|
.padding(6)
|
||||||
.contentShape(Rectangle())
|
.contentShape(Rectangle())
|
||||||
// The band's trash-side surface. It only ever arms from the column's empty space — a
|
// The band's trash-side surface. It arms from the column's empty space, full height
|
||||||
// drag begun on a row is that row's drag-out — and the begin guard makes that geometric
|
// (above) included, so a drag can start from the blank area below the last row exactly
|
||||||
// rather than a matter of gesture priority (`MarqueeControl`).
|
// as the board background allows on the live side — a drag begun on a row instead is that
|
||||||
|
// row's drag-out, and the begin guard makes that geometric rather than a matter of
|
||||||
|
// gesture priority (`MarqueeControl`).
|
||||||
.simultaneousGesture(marquee.gesture(side: .trashed))
|
.simultaneousGesture(marquee.gesture(side: .trashed))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user