ios: better fix for scroll

This commit is contained in:
2026-05-02 22:25:24 -07:00
parent 2da73f802c
commit 4b0cc3fbf7
2 changed files with 15 additions and 2 deletions

View File

@@ -5,6 +5,7 @@ struct SybilChatTranscriptView: View {
var messages: [Message] var messages: [Message]
var isLoading: Bool var isLoading: Bool
var isSending: Bool var isSending: Bool
@State private var hasHandledInitialTranscriptScroll = false
private var hasPendingAssistant: Bool { private var hasPendingAssistant: Bool {
messages.contains { message in messages.contains { message in
@@ -55,10 +56,11 @@ struct SybilChatTranscriptView: View {
scrollToBottom(with: proxy, animated: false) scrollToBottom(with: proxy, animated: false)
} }
.onChange(of: messages.map(\.id)) { _, _ in .onChange(of: messages.map(\.id)) { _, _ in
scrollToBottom(with: proxy, animated: !isLoading) scrollToBottom(with: proxy, animated: hasHandledInitialTranscriptScroll && !isLoading)
hasHandledInitialTranscriptScroll = true
} }
.onChange(of: isSending) { _, _ in .onChange(of: isSending) { _, _ in
scrollToBottom(with: proxy, animated: true) scrollToBottom(with: proxy, animated: hasHandledInitialTranscriptScroll)
} }
} }
} }

View File

@@ -24,6 +24,16 @@ struct SybilWorkspaceView: View {
viewModel.errorMessage != nil viewModel.errorMessage != nil
} }
private var transcriptScrollContextID: String {
if viewModel.draftKind == .chat {
return "draft-chat"
}
if case let .chat(chatID) = viewModel.selectedItem {
return "chat:\(chatID)"
}
return "chat:none"
}
var body: some View { var body: some View {
VStack(spacing: 0) { VStack(spacing: 0) {
if showsHeader { if showsHeader {
@@ -53,6 +63,7 @@ struct SybilWorkspaceView: View {
isLoading: viewModel.isLoadingSelection, isLoading: viewModel.isLoadingSelection,
isSending: viewModel.isSending isSending: viewModel.isSending
) )
.id(transcriptScrollContextID)
} }
} }
.frame(maxWidth: .infinity, maxHeight: .infinity) .frame(maxWidth: .infinity, maxHeight: .infinity)