ScrollView с нижним переходом дает странное поведение?

Просто скопируйте и вставьте код, чтобы увидеть поведение. Я хочу подтвердить, что я делаю что-то не так или это ошибка?

import SwiftUI

struct Stackru13: View {
    @State var hide: Bool = false
    var body: some View {
        VStack {
            Spacer()
            Button(action: {
                self.hide.toggle()
            }) {
                Text("Hide")
            }
            Spacer()

            if(!hide) {
                ScrollView(.horizontal, showsIndicators: false) {
                    HStack {
                        ForEach(1...20, id:\.self) {
                            Text("\($0)")
                        }
                    }
                }
                .frame(height: 50, alignment: .center)
                .padding()
                .background(Color.red)
                .animation(.linear)
                .transition(.move(edge: .bottom))
            }

        }.edgesIgnoringSafeArea(.all)
    }
}

struct Stackru13_Previews: PreviewProvider {
    static var previews: some View {
        Stackru13()
    }
}

После запуска кода и нажатия Hide числа начнут бесконечно дрожать, если я уберу .transition модификатор вроде все работает нормально.

Также важно отметить удаление .edgesIgnoringSafeArea модификатор решит эту проблему, но мне нужен этот модификатор.

1 ответ

Я получаю такое же дрожание с вашим кодом на iPhone(от 10 до 11), но не на старых iPhone и iPad. Но если я использую

.frame(height: 70, alignment: .center)

Дрожь исчезает. Я предполагаю, что недостаточно места для рендеринга / компоновки ScrollView с высотой =50 на определенных устройствах / разрешениях.

Использование macos 10.15.5, Xcode 11.5 и 11.6 beta, целевой ios 13.5 и Mac Catalyst. Протестировано на реальных устройствах iPhone и iPad, а также на различных, но не на всех симуляторах.

Другие вопросы по тегам