0

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

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修饰符会解决它,但我确实需要这个修饰符。

4

1 回答 1

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 以及各种但不是所有模拟器上测试。

于 2020-06-13T08:42:06.067 回答