Как ни странно, если вы удалите HStack из внешнего слоя, вы сможете обнаружить перекат, иначе вы не сможете
Или если вы уберете кнопку и просто используете текст ты можешь это обнаружить? Это ошибка? Как это исправить?
см. СКРИНШОТЫ
Когда нет HStack, это плохо
Это плохо ок, если нет HStack
import SwiftUI
struct ScrollOffsetPreferenceKey: PreferenceKey {
typealias Value = CGFloat
static var defaultValue: CGFloat = 0
static func reduce(value: inout CGFloat, nextValue: () -> CGFloat) {
value = nextValue()
}
}
struct test5Scroll: View {
var body: some View {
NavigationView {
ScrollView {
GeometryReader { proxy in
if let distanceFromTop = proxy.bounds(of: .named("MyScrollView"))?.minY {
Text(distanceFromTop, format: .number)
.font(.system(size: 40))
.padding(.top, 120)
.foregroundStyle(.pink)
.navigationTitle("Why Can't Detected?")
.preference(key: ScrollOffsetPreferenceKey.self, value: distanceFromTop)
} else {
Text("can't be detected")
}
}
ForEach(0 ..< 30) { index in
// Strangely enough, if you remove the HStack from the outer layer, you can detect the roll, otherwise you can't
// Or if you take the Button out and you just use Text you can detect it? Is this a bug? How to fix it?
//A. The code simply fails with HStack
HStack{
Button(action: {
}, label: {
Text("item --- \(index)")
})
}
.frame(width: 100, height: 40)
//B. The code will work if HStack is removed
// Button(action: {
//
// }, label: {
// Text("item --- \(index)")
// })
// .frame(width: 100, height: 40)
}
}
.background(.black.opacity(0))
.coordinateSpace(.named("MyScrollView"))
.onPreferenceChange(ScrollOffsetPreferenceKey.self) { value in
// Why can't it be detected when it rolls?
print("Scroll offset ----- \(value)")
}
}
}
}
#Preview {
test5Scroll()
}
Подскажите, как сделать? Пожалуйста, спасибо Когда нет HStack, это нормально, но мне нужен HStack. Это ошибка SwiftUI?
Как ни странно, если вы удалите HStack из внешнего слоя, вы сможете обнаружить перекат, иначе вы не сможете Или если вы уберете кнопку и просто используете текст ты можешь это обнаружить? Это ошибка? Как это исправить? см. СКРИНШОТЫ Когда нет HStack, это плохо Это плохо ок, если нет HStack [code] import SwiftUI struct ScrollOffsetPreferenceKey: PreferenceKey { typealias Value = CGFloat static var defaultValue: CGFloat = 0 static func reduce(value: inout CGFloat, nextValue: () -> CGFloat) { value = nextValue() } } struct test5Scroll: View { var body: some View { NavigationView {
ScrollView { GeometryReader { proxy in if let distanceFromTop = proxy.bounds(of: .named("MyScrollView"))?.minY { Text(distanceFromTop, format: .number) .font(.system(size: 40)) .padding(.top, 120) .foregroundStyle(.pink) .navigationTitle("Why Can't Detected?") .preference(key: ScrollOffsetPreferenceKey.self, value: distanceFromTop) } else { Text("can't be detected") } } ForEach(0 ..< 30) { index in // Strangely enough, if you remove the HStack from the outer layer, you can detect the roll, otherwise you can't // Or if you take the Button out and you just use Text you can detect it? Is this a bug? How to fix it?
//A. The code simply fails with HStack HStack{ Button(action: {
//B. The code will work if HStack is removed // Button(action: { // // }, label: { // Text("item --- \(index)") // }) // .frame(width: 100, height: 40) } } .background(.black.opacity(0)) .coordinateSpace(.named("MyScrollView")) .onPreferenceChange(ScrollOffsetPreferenceKey.self) { value in // Why can't it be detected when it rolls? print("Scroll offset ----- \(value)") } }
} }
#Preview { test5Scroll() }
[/code] [b]Подскажите, как сделать? Пожалуйста, спасибо[/b] [b]Когда нет HStack, это нормально, но мне нужен HStack. Это ошибка SwiftUI?[/b]