Skip to content

fix(chat): stand the jump button outside the bar clip so the reply strip no longer leaks - #1074

Merged
bmc08gt merged 1 commit into
mainfrom
fix/chat-reply-strip
Oct 16, 2026
Merged

bmc08gt merged 1 commit into
mainfrom
fix/chat-reply-strip

Conversation

@bmc08gt

@bmc08gt bmc08gt commented Oct 15, 2026

Copy link
Copy Markdown
Collaborator

Since #1068, opening or closing the reply strip with the jump-to-bottom button up leaves a box with the strip's ✕ hanging above the composer for a few frames. That stray ✕ also takes taps.

#1068 drew the button inside the bar and cut an 88×76pt hole in the bar clip's mask so it could show above the clip. The hole sat on the clip's top edge, which is the edge that slides to reveal and hide the strip. While the edge moved, the strip's trailing end showed through the hole. Placing the hole from the bar's measured height instead didn't fix it on a device, so this PR removes the hole.

  • The button gets its own UIHostingController, pinned on top of the clip's top edge and below the clip in z-order. It rides the keyboard and the reply reveal in the same layout pass as the clip. When the attach panel lets the bar draw past its edge, the bar covers the button.
  • BarClipView loses the mask and the overhang and goes back to clipsToBounds.
  • The button's view takes touches only in its trailing JumpToBottomButtonView.reach.width (88pt), and only while the button shows. It decides by position rather than by which view claims the touch, because SwiftUI answers a tap on its content with the hosting view itself, the same view it returns for empty space.

ChatScreenBarClipTests replaces the overhang test with one that checks three things through a reply opening and closing: the button's view stays on the clip's edge, a tap on a showing button reaches it, and taps beside it or on a hidden button fall through.

…rip no longer leaks

#1068 drew the jump-to-bottom button inside the bar and cut an 88x76pt hole
in the bar clip's mask so it could show above the clip. The hole was pinned
to the clip's top edge, and that edge is what slides to reveal and hide the
reply strip. While it moved, the hole showed the strip's trailing end, and
the stray ✕ in it took taps.

The button now has its own hosting view, pinned on top of the clip's top
edge and below the clip in z-order, so it rides every move of that edge and
the clip cuts the bar at its bounds again. The view takes touches only in
its trailing 88pt and only while the button shows. It decides by position
because SwiftUI answers a tap on its content with the hosting view itself,
the same view it returns for empty space.
@bmc08gt bmc08gt self-assigned this Oct 15, 2026
@bmc08gt
bmc08gt merged commit d1aca16 into main Oct 16, 2026
2 of 3 checks passed
bmc08gt added a commit that referenced this pull request Oct 16, 2026
* origin/main: (23 commits)
  feat(chat): open message links on the linked message (#1055)
  fix(chat): load the link preview for a draft restored on opening a chat
  fix(chat): bring a removed link preview back once its link is edited out of the draft
  fix(chat): animate the composer link card in and out on the chip spring
  fix(chat): draw the composer link preview as a compact card with its remove button on the corner
  fix(chat): enlarge the composer link image and pin its remove button to it
  feat(chat): send a link preview alongside staged photos
  feat(chat): show the link preview's page in the composer before its image uploads
  feat(chat): draw a web card from the sender's preview and drop the receive-side fetch
  feat(chat): build a link preview in the composer and send it with the text
  feat(chat): carry a text message's link preview on the wire and in the store
  feat(chat): add the sender-side link preview checks and their shared vectors
  fix(chat): match Android's update-app bubble border and subtitle
  fix(chat): stand the jump button outside the bar clip so the reply strip no longer leaks (#1074)
  build: update release manifest
  fix(home): draw unselected tab glyphs and labels white on every iOS version (#1073)
  feat(settings): version card for TestFlight builds, kept current by the release manifest (#1072)
  feat(settings): add the update dot and version card (#1070)
  feat(update): tell users when a newer App Store version is out (#1069)
  feat(chat): jump-to-bottom button with unread badge (#1068)
  ...

# Conflicts:
#	Flipcash/Core/Screens/Conversation/LinkCardClassifier.swift
#	Flipcash/Core/Screens/Conversation/LinkCardFeed.swift
#	Flipcash/Core/Screens/Conversation/LinkCardResolver.swift
#	Flipcash/Core/Session/SessionAuthenticator.swift
#	FlipcashCore/Sources/FlipcashCore/Models/Chat/LinkCard.swift
#	FlipcashTests/Chat/LinkCardResolverTests.swift
#	FlipcashUI/Sources/FlipcashUI/Chat/ChatShareProfileCell.swift
#	FlipcashUI/Sources/FlipcashUI/Chat/LinkCardSource.swift
#	FlipcashUI/Sources/FlipcashUI/Chat/LinkCardView.swift
bmc08gt added a commit that referenced this pull request Oct 16, 2026
…t/message-link-share

* origin/feat/message-link-card: (23 commits)
  feat(chat): open message links on the linked message (#1055)
  fix(chat): load the link preview for a draft restored on opening a chat
  fix(chat): bring a removed link preview back once its link is edited out of the draft
  fix(chat): animate the composer link card in and out on the chip spring
  fix(chat): draw the composer link preview as a compact card with its remove button on the corner
  fix(chat): enlarge the composer link image and pin its remove button to it
  feat(chat): send a link preview alongside staged photos
  feat(chat): show the link preview's page in the composer before its image uploads
  feat(chat): draw a web card from the sender's preview and drop the receive-side fetch
  feat(chat): build a link preview in the composer and send it with the text
  feat(chat): carry a text message's link preview on the wire and in the store
  feat(chat): add the sender-side link preview checks and their shared vectors
  fix(chat): match Android's update-app bubble border and subtitle
  fix(chat): stand the jump button outside the bar clip so the reply strip no longer leaks (#1074)
  build: update release manifest
  fix(home): draw unselected tab glyphs and labels white on every iOS version (#1073)
  feat(settings): version card for TestFlight builds, kept current by the release manifest (#1072)
  feat(settings): add the update dot and version card (#1070)
  feat(update): tell users when a newer App Store version is out (#1069)
  feat(chat): jump-to-bottom button with unread badge (#1068)
  ...
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