fix scroll down
This commit is contained in:
parent
5f03feba66
commit
91a3117595
@ -22,33 +22,22 @@ struct PrivateChatView: View {
|
|||||||
}
|
}
|
||||||
|
|
||||||
var body: some View {
|
var body: some View {
|
||||||
ZStack(alignment: .bottomTrailing) {
|
ScrollViewReader { proxy in
|
||||||
ScrollViewReader { proxy in
|
ZStack(alignment: .bottomTrailing) {
|
||||||
content
|
content
|
||||||
.onChange(of: viewModel.messages.count) { _ in
|
.onChange(of: viewModel.messages.count) { _ in
|
||||||
guard !viewModel.isLoadingMore else { return }
|
guard !viewModel.isLoadingMore else { return }
|
||||||
let targetId = viewModel.messages.last?.id ?? bottomAnchorId
|
scrollToBottom(proxy: proxy)
|
||||||
DispatchQueue.main.async {
|
|
||||||
withAnimation(.easeInOut(duration: 0.2)) {
|
|
||||||
proxy.scrollTo(targetId, anchor: .bottom)
|
|
||||||
}
|
|
||||||
hasPositionedToBottom = true
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
.onChange(of: scrollToBottomTrigger) { _ in
|
.onChange(of: scrollToBottomTrigger) { _ in
|
||||||
let targetId = viewModel.messages.last?.id ?? bottomAnchorId
|
scrollToBottom(proxy: proxy)
|
||||||
DispatchQueue.main.async {
|
|
||||||
withAnimation(.easeInOut(duration: 0.2)) {
|
|
||||||
proxy.scrollTo(targetId, anchor: .bottom)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
if !isBottomAnchorVisible {
|
if !isBottomAnchorVisible {
|
||||||
scrollToBottomButton
|
scrollToBottomButton(proxy: proxy)
|
||||||
.padding(.trailing, 20)
|
.padding(.trailing, 20)
|
||||||
.padding(.bottom, 30)
|
.padding(.bottom, 56)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
.navigationTitle(title)
|
.navigationTitle(title)
|
||||||
@ -294,8 +283,10 @@ struct PrivateChatView: View {
|
|||||||
.background(.ultraThinMaterial)
|
.background(.ultraThinMaterial)
|
||||||
}
|
}
|
||||||
|
|
||||||
private var scrollToBottomButton: some View {
|
private func scrollToBottomButton(proxy: ScrollViewProxy) -> some View {
|
||||||
Button(action: scrollToBottom) {
|
Button {
|
||||||
|
scrollToBottom(proxy: proxy)
|
||||||
|
} label: {
|
||||||
Image(systemName: "arrow.down")
|
Image(systemName: "arrow.down")
|
||||||
.font(.system(size: 18, weight: .semibold))
|
.font(.system(size: 18, weight: .semibold))
|
||||||
.foregroundColor(.white)
|
.foregroundColor(.white)
|
||||||
@ -369,10 +360,16 @@ struct PrivateChatView: View {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private func scrollToBottom() {
|
private func scrollToBottom(proxy: ScrollViewProxy) {
|
||||||
scrollToBottomTrigger = .init()
|
|
||||||
hasPositionedToBottom = true
|
hasPositionedToBottom = true
|
||||||
isBottomAnchorVisible = true
|
|
||||||
|
let targetId = viewModel.messages.last?.id ?? bottomAnchorId
|
||||||
|
|
||||||
|
DispatchQueue.main.async {
|
||||||
|
withAnimation(.easeInOut(duration: 0.2)) {
|
||||||
|
proxy.scrollTo(targetId, anchor: .bottom)
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private struct ComposerIconButtonStyle: ButtonStyle {
|
private struct ComposerIconButtonStyle: ButtonStyle {
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user