C3.19.4Nested scroller touch ownershipdesignresearch

Touch-ownership rules for nested scrollers

Aliases: touch ownership · scroll capture · nested recognizers

What it is

When two scrollable views sit under one contact, the system must decide who owns the touch before any scrolling happens. Ownership is a disambiguation rule: at down or first move, events go to the inner scroller, the outer, or one of them—not a mid-scroll handoff. A horizontal card rail stacked on a vertical feed has to answer, at the press, whether this is the rail’s pan or the feed’s scroll.

Why it happens

Three policies are common. Inner-first: hit-testing gives the deepest scroller exclusive moves until it fails. Outer-first: the parent claims, and the child takes over only if the parent fails. Simultaneous: both hear events and a failure graph picks a winner. Once ownership locks in the onset window, changing it later turns already-applied offsets into a bad ledger. This leaf is about which view gets frame one, not about handing leftover displacement to the parent after the child hits an edge—that is a runtime baton pass.

Studying it

Play purely vertical, purely horizontal, and diagonal strokes on the nest, and log who receives the first frame and who holds the touch when the threshold is crossed. Measures include wrong-owner rate, retries, and onset delay. Code “wrong owner at start” separately from “handoff at the edge felt stuck”; collapsing them mixes two mechanisms.

Where it stops holding

A single list has no ownership question. A child that cannot scroll (a static banner) must not be a candidate owner. Pointer and keyboard scrolling never enter this touch policy. A system edge gesture can steal the stream before the app’s owner is chosen. Ownership also does not explain fights between text-selection handles and page scrolling; that is handle hit-testing, not a container-tree arbitration.

Applying it

  • Write the onset owner for each nested pair: the card rail takes horizontal by default, the feed takes vertical, and a diagonal locks to the winner’s axis.
  • Lock the owner with failure requirements, not with a race on setContentOffset, so both layers never scroll together.
  • On device, start from mid-card, from the seam, and from list gutter, and confirm the first travel drives only one layer.

Related

  • Same group: C3.19.1 Multiple gestures compete for the same onset · C3.19.2 Disambiguation order by direction, speed, finger count, and duration · C3.19.3 No irreversible commit during the discrimination window
  • Adjacent: C3.23 Nested scroll touch capture · C3.31 System versus app gesture priority
  • Search: touch ownership · nested scroll · gesture capture

Cards in the same group

Quick Actions

Share

Share this page

ios_share

https://hci.top/en/handbook/C3.19.4