Почему я не могу динамически изменять контент в VStack, если у меня мало объектов в ScrollView? Что удивительно, если объектов много, то все меняется красиво, а если мало, то прокрутка работает только вниз (из-за этого могут быть глюки при попытке прокрутки вверх)
Мой код:
import Introspect
struct SwiftUIView: View {
@StateObject var myCoord = MyCoord()
var body: some View {
VStack {
Color.red
.frame(height: myCoord.height)
ScrollView {
ForEach(0..<20) { _ in
Color.green
.frame(height: 20)
}
.background(Color.red)
}
.introspectScrollView { scroll in
scroll.delegate = myCoord
}
}
}
}
class MyCoord: NSObject, UIScrollViewDelegate, ObservableObject {
let maxSize: CGFloat = 76
let minSize: CGFloat = 56
@Published var height: CGFloat = 76
func scrollViewDidScroll(_ scrollView: UIScrollView) {
let size = maxSize - scrollView.contentOffset.y
height = min(maxSize, max(minSize, size))
}
}
Решено было поставить все представления в ZStack и добавить несколько поддельных представлений в представлении прокрутки. 1 вид отвечает за размер, куда не может провалиться скролл. 2 вид отвечает за размер между максимальным и минимальным размером шапки Вот примеры
import Introspect
struct ContentView: View {
@StateObject private var myCoord = MyCoord()
var body: some View {
let sizeOfPlaceholder = myCoord.maxSize - myCoord.minSize
ZStack(alignment: .top) {
VStack(spacing: 0) {
Color.black
.frame(height: myCoord.minSize)
ScrollView {
Color.brown
.frame(height:sizeOfPlaceholder)
ForEach(0..<20) { number in
Text("\(number)")
.background(Color.red)
.frame(height: 20)
}
}
.padding(.vertical, 1)
.introspectScrollView { scroll in
scroll.delegate = myCoord
}
}
Color.green
.frame(height: myCoord.height)
}
}
}
class MyCoord: NSObject, UIScrollViewDelegate, ObservableObject {
let maxSize: CGFloat = 76
let minSize: CGFloat = 56
@Published var height: CGFloat = 76
func scrollViewDidScroll(_ scrollView: UIScrollView) {
print(scrollView.contentOffset.y)
let size = maxSize - scrollView.contentOffset.y
height = min(maxSize, max(minSize, size))
}
}
Вы пытались использовать представление списка?