101 lines
3.2 KiB
Swift
101 lines
3.2 KiB
Swift
//
|
|
// ComposeContentView.swift
|
|
//
|
|
//
|
|
// Created by MainasuK on 22/9/30.
|
|
//
|
|
|
|
import SwiftUI
|
|
|
|
public struct ComposeContentView: View {
|
|
|
|
@ObservedObject var viewModel: ComposeContentViewModel
|
|
|
|
@State var contentOffsetDelta: CGFloat = .zero
|
|
|
|
public var body: some View {
|
|
ScrollView {
|
|
VStack(spacing: .zero) {
|
|
GeometryReader { geometry in
|
|
Color.clear.preference(
|
|
key: ScrollOffsetPreferenceKey.self,
|
|
value: geometry.frame(in: .named("scrollView")).origin
|
|
)
|
|
}.frame(width: 0, height: 0)
|
|
.onPreferenceChange(ScrollOffsetPreferenceKey.self) { offset in
|
|
print("contentOffset: \(offset)")
|
|
}
|
|
VStack {
|
|
Text("Reply")
|
|
}
|
|
.frame(height: 100)
|
|
.frame(maxWidth: .infinity)
|
|
.background(Color.blue)
|
|
.background(
|
|
GeometryReader { geometry in
|
|
Color.clear.preference(
|
|
key: ViewFramePreferenceKey.self,
|
|
value: geometry.frame(in: .named("scrollView"))
|
|
)
|
|
}
|
|
.onPreferenceChange(ViewFramePreferenceKey.self) { frame in
|
|
print("reply frame: \(frame)")
|
|
}
|
|
)
|
|
VStack {
|
|
Text("Content")
|
|
}
|
|
.frame(maxWidth: .infinity)
|
|
.background(Color.orange)
|
|
} // end VStack
|
|
.offset(y: contentOffsetDelta)
|
|
} // end ScrollView
|
|
.coordinateSpace(name: "scrollView")
|
|
} // end body
|
|
}
|
|
|
|
private struct ScrollOffsetPreferenceKey: PreferenceKey {
|
|
static var defaultValue: CGPoint = .zero
|
|
|
|
static func reduce(value: inout CGPoint, nextValue: () -> CGPoint) { }
|
|
}
|
|
|
|
private struct ViewFramePreferenceKey: PreferenceKey {
|
|
static var defaultValue: CGRect = .zero
|
|
|
|
static func reduce(value: inout CGRect, nextValue: () -> CGRect) { }
|
|
}
|
|
|
|
//struct ScrollView<Content: View>: View {
|
|
// let axes: Axis.Set
|
|
// let showsIndicators: Bool
|
|
// let offsetChanged: (CGPoint) -> Void
|
|
// let content: Content
|
|
//
|
|
// init(
|
|
// axes: Axis.Set = .vertical,
|
|
// showsIndicators: Bool = true,
|
|
// offsetChanged: @escaping (CGPoint) -> Void = { _ in },
|
|
// @ViewBuilder content: () -> Content
|
|
// ) {
|
|
// self.axes = axes
|
|
// self.showsIndicators = showsIndicators
|
|
// self.offsetChanged = offsetChanged
|
|
// self.content = content()
|
|
// }
|
|
//
|
|
// var body: some View {
|
|
// SwiftUI.ScrollView(axes, showsIndicators: showsIndicators) {
|
|
// GeometryReader { geometry in
|
|
// Color.clear.preference(
|
|
// key: ScrollOffsetPreferenceKey.self,
|
|
// value: geometry.frame(in: .named("scrollView")).origin
|
|
// )
|
|
// }.frame(width: 0, height: 0)
|
|
// content
|
|
// }
|
|
// .coordinateSpace(name: "scrollView")
|
|
// .onPreferenceChange(ScrollOffsetPreferenceKey.self, perform: offsetChanged)
|
|
// }
|
|
//}
|