Что делать, если ScrollView, содержащий кнопку HStack в SwiftUI, не может обнаружить прокрутку? [дубликат]Javascript

Форум по Javascript
Ответить
Anonymous
 Что делать, если ScrollView, содержащий кнопку HStack в SwiftUI, не может обнаружить прокрутку? [дубликат]

Сообщение Anonymous »

Как ни странно, если вы удалите 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?

Подробнее здесь: https://stackoverflow.com/questions/793 ... i-cant-det
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Javascript»