底部过渡的ScrollView给人怪异的行为?

时间:2020-06-12 22:03:28

标签: swiftui swiftui-animation

只需复制并粘贴代码即可查看行为。我想确认我做错了什么还是一个错误?

import SwiftUI

struct StackOverflow13: 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 StackOverflow13_Previews: PreviewProvider {
    static var previews: some View {
        StackOverflow13()
    }
}

运行代码并按Hide号将无限地震动,如果我删除了.transition修饰符,一切似乎都正常。

同样重要的是要注意删除.edgesIgnoringSafeArea修饰符会解决该问题,但我确实需要此修饰符。

1 个答案:

答案 0 :(得分:1)

在您的iPhone(10到11)上,我的代码出现了相同的抖动行为,但在较旧的iPhone和ipad上却没有。但是如果我使用

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

震动消失了。我的猜测是,在某些设备/分辨率上,没有足够的空间来渲染/布局height = 50的ScrollView。

使用macOS 10.15.5,Xcode 11.5和11.6 beta,目标ios 13.5和mac催化剂。在真实设备iPhone和iPad以及各种(但不是全部)模拟器上进行了测试。