fix(reader): prevent webtoon backward scroll from jumping chapters#652
Merged
fix(reader): prevent webtoon backward scroll from jumping chapters#652
Conversation
Move rebuildContentItemsIfNeeded from update() into handleDataReload() so offset capture, index rebuild, layout reload, and offset restore form an atomic sequence. Previously the index mapping was updated before the offset was captured against the old layout, causing wrong offsets when previous chapters were prepended. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Problem
Scrolling backward (up) in Webtoon mode causes the reader to jump to previous chapters. Tapping the "previous" zone also jumps a full chapter, and dragging up triggers cascading jumps through many chapters.
The root cause is a state inconsistency in
update():rebuildContentItemsIfNeeded()updates the page-to-index mapping to reflect newly prepended chapters beforehandleDataReload()captures the current scroll offset. The capture then looks up the current page's new index against the old collection view layout, reading the wrong cell's frame. AfterreloadData(), the wrong offset is restored, placing the user in the wrong chapter and triggering further segment preloading in a cascade.Approach
Move
rebuildContentItemsIfNeededfromupdate()intohandleDataReload()so the entire sequence is atomic:For deferred reloads (user actively scrolling), the offset is captured at defer time while indices and layout are still consistent, stored in
pendingReloadPreCapturedOffset, and passed through when the deferred reload fires.Scope
WebtoonScrollEngine: addneedsRebuild(viewModel:)check andpendingReloadPreCapturedOffsetstorageWebtoonReaderView_iOS: restructureupdate(),handleDataReload(),applyPendingReloadIfNeeded()WebtoonReaderView_macOS: same restructuring as iOSTesting
🤖 Generated with Claude Code