[iPad/iOS Safari] Scroll position jumps far up when scrolling up slightly in chat history, requires long scroll back down to return to current conversation

Open 💬 0 comments Opened Jun 17, 2026 by miaomartin-rgb

Preflight Checklist

  • [x] I have searched existing issues and this hasn't been reported yet
  • [x] This is a single bug report (please file separate reports for different bugs)
  • [x] I am using the latest version of Claude Code

What's Wrong?

Environment

| Item | Value |
|------|-------|
| Platform | iPad (iPadOS) |
| Browser | Safari |
| iPadOS version | iPadOS 18.6
| iPad model | iPad Air 5
| Claude Code version | Web / claude.ai/code |
| Date observed | 2026-06-15 (consistently reproducible) |
| Conversation length | Long (~100+ messages) |

Summary

When scrolling upward by a small amount in a long chat history on iPad Safari, the scroll position jumps far up (to messages from many turns / hours ago) instead of moving smoothly. To return to the current bottom of the conversation, the user must perform a long downward scroll, which is highly disruptive during active sessions.

Steps to reproduce

  1. Open claude.ai/code (or Claude Code web) on an iPad with Safari
  2. Have a long-running conversation (50+ exchanges)
  3. While near the bottom of the conversation, perform a small upward swipe (e.g., to re-read the previous message you just received)
  4. Observe scroll position jumping far upward to old messages
  5. Scroll down repeatedly to return to current position

Expected behavior

  • Small upward scroll should move the viewport by approximately the same distance as the gesture
  • Scroll position should be preserved smoothly without sudden jumps
  • Returning to "now" should be near-instantaneous (e.g., a single tap on a "scroll to bottom" affordance, or a momentum-based return)

Actual behavior

  • Small upward scroll triggers a large jump to messages from much earlier in the conversation (possibly the top of a virtualized chunk being re-rendered)
  • No visual indicator that this jump occurred
  • Returning requires manual, lengthy downward scrolling
  • This makes it nearly impossible to reference a message I just saw — by the time I scroll back down, the new assistant reply may have already arrived

Impact

  • High disruption during active conversations on iPad
  • Particularly problematic when:
  • Reviewing the assistant's previous answer to compose a follow-up
  • Copying code/text from a recent message
  • Using Claude Code as a mobile/away-from-desk tool
  • Forces user to switch to a desktop browser for any non-trivial conversation, defeating the value of iPad as a portable client

Suspected cause

Looks like virtualized scrolling (e.g., react-window / react-virtualized) interacting badly with iOS WebKit's momentum scrolling, causing scroll offset to be lost or jumped to the top of a recycled chunk during re-layout. May be related to:

  • Scroll anchoring not being properly maintained on iOS Safari
  • overflow-anchor CSS not behaving as expected
  • IntersectionObserver thresholds triggering bulk position recalculations

Workaround currently used

  • Switching to desktop browser (defeats the purpose of iPad use)
  • Avoiding upward scroll entirely (constrains conversation review)

Suggested fix direction

  • Preserve scroll position via scroll: anchor or explicit scrollTop snapshotting before list re-renders
  • Add a floating "Jump to latest" button that appears whenever the user scrolls more than X px above the bottom
  • On iOS Safari, consider falling back to non-virtualized rendering for conversations under N messages, since the cost of virtualization is outweighed by the UX cost

Additional context

  • Issue is reliably reproducible every session on iPad
  • Does not occur on macOS Safari or Chrome (desktop)
  • Have not tested on iPhone Safari (smaller viewport may mask or change behavior)

---

Thanks for the work on Claude Code — this is the single biggest UX papercut for iPad usage, and addressing it would significantly improve the mobile experience.

What Should Happen?

A small upward scroll should move the viewport by approximately the same distance as the gesture — not jump to ancient history.

Specifically:

  1. Scroll position should be preserved during list re-renders / virtualization recycling (e.g., via overflow-anchor, explicit scrollTop snapshotting, or scroll anchoring API).
  2. Add a floating "Jump to latest" button that appears whenever the user has scrolled more than N px above the bottom — this is standard in Slack/Discord/Telegram and would mitigate the issue even if root cause is hard to fix.
  3. Consider non-virtualized rendering for conversations under a certain message count on mobile Safari — virtualization cost may exceed UX benefit on smaller devices.

<!-- Failed to upload "ScreenRecording_06-17-2026 11-14-42_1.mp4" -->

Error Messages/Logs

Steps to Reproduce

Steps to Reproduce

  1. On an iPad, open Safari and navigate to claude.ai/code
  2. Sign in and either start a new conversation or open one that already has 50+ messages
  3. Continue the conversation until the viewport is automatically scrolled to the bottom (latest assistant reply visible)
  4. With one finger, swipe upward by a small distance (e.g., 1–2 cm) — just enough to re-read the previous message you sent or received
  5. Observe that the viewport jumps abruptly to messages far earlier in the conversation (often several screens up, sometimes to the very top)
  6. To return to the latest message, manually swipe downward repeatedly — this can take 10+ seconds in a long session, and there is no "jump to latest" affordance

Frequency: Reproduces on every single attempt in a long conversation. Not intermittent.

Notes:

  • Does not reproduce on macOS Safari, Chrome (desktop), or Firefox (desktop)
  • Have not tested on iPhone Safari
  • Reproduces regardless of whether assistant is still streaming a response or has finished
  • Reproduces both immediately after sending a message and after idle pause

Claude Model

None

Is this a regression?

Yes, this worked in a previous version

Last Working Version

_No response_

Claude Code Version

1.260611.1

Platform

Anthropic API

Operating System

macOS

Terminal/Shell

Terminal.app (macOS)

Additional Information

_No response_

View original on GitHub ↗