Skip to content

fix(chat): keep the long-press menu off its neighbours - #904

Merged
bmc08gt merged 2 commits into
mainfrom
fix/chat-lift-bubble-in-place
Sep 29, 2026
Merged

bmc08gt merged 2 commits into
mainfrom
fix/chat-lift-bubble-in-place

Conversation

@bmc08gt

@bmc08gt bmc08gt commented Sep 29, 2026

Copy link
Copy Markdown
Collaborator

Long-pressing any bubble slid the group's invite card at the top of the transcript down over its own reaction pills, and it stayed there until the next scroll.

Cause. The menu froze the transcript's inset by switching contentInsetAdjustmentBehavior from .always to .never. That changes the safe area UIKit passes to the rows, and the SwiftUI-hosted card under the nav bar re-laid itself out for it. Skipping the freeze on a device stopped the shift. It predates #898: a bisect back to #879 was bad throughout, because the freeze is older and the shift only shows once pills sit under a hosted card.

Changes

  • The freeze holds the bottom inset at its keyboard-up value and leaves the mode at .always, so the keyboard dropping under the menu still doesn't move the transcript.
  • The strip takes the side of the bubble the menu didn't. UIKit picks the menu's side, and a bubble near the bottom had both above it.
  • fix(chat): polish the reaction strip and add double-tap #898's taller lift now applies only to bubbles too close to the top for the strip to fit above. Elsewhere it left an empty band between the bubble and a menu placed above it.
  • The lift's copy fades out as the row's bubble reappears. UIKit keeps it above the transcript for about 0.4s after it lands, so a bubble partly under the bar's soft edge stayed sharp until it went.

This keeps UIKit's menu, so the menu still goes above a bubble near the bottom. Sliding only the bubble up, WhatsApp-style, needs our own overlay; .claude/plans/2026-09-29-chat-custom-context-menu.md records why and how.

Replaces #903.

Long-pressing any bubble slid the group's invite card at the top of the
transcript down over its own reaction pills, and it stayed there until
the next scroll. The menu froze the transcript's inset by switching
`contentInsetAdjustmentBehavior` to `.never`, which changes the safe area
UIKit hands down to the rows; the SwiftUI-hosted card under the nav bar
re-laid itself out for it. The freeze now holds the bottom inset at its
keyboard-up value and leaves the mode at `.always`. The shift predates
#898: it has been there since the freeze landed, and only showed once
pills sat under a hosted card.

The strip now takes whichever side of the bubble the menu didn't. UIKit
picks the menu's side, and a bubble near the bottom got the menu and
strip both above it. The taller lift from #898 now applies only to
bubbles too close to the top for the strip to fit above; elsewhere it
left an empty band between the bubble and a menu placed above it.

The lift's copy fades out as the row's bubble reappears. UIKit keeps
the copy above the transcript for about 0.4s after it lands, so a bubble
partly under the bar's soft edge stayed sharp until it went.
UIKit's context menu can't slide only the pressed bubble to a spot with the strip above and the menu below. This records what the device investigation ruled out and the shape of an overlay that can.
@bmc08gt bmc08gt self-assigned this Sep 29, 2026
@bmc08gt
bmc08gt merged commit 2641246 into main Sep 29, 2026
1 check failed
@bmc08gt
bmc08gt deleted the fix/chat-lift-bubble-in-place branch October 5, 2026 15:13
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant