ios - SwiftUI - 从底部转换时水平 ScrollView 锁定

标签 ios swift scrollview transition swiftui

本质上,每当我尝试使用 AnyTransition.move(edge: .bottom) 转换水平滚动的 ScrollView 时,应用程序就会卡住,并且内存不断增加。我已经成功地在以下内容中重现了该问题:

struct ContentView: View {
    @State private var showScroll: Bool = false

    var body: some View {
        VStack {
            Spacer()
            Button(action: {
                withAnimation {
                    self.showScroll = true
                }
            }, label: {
                Text("Hit me")
            }).padding()
                .background(Capsule().fill())
            Spacer()
            if showScroll {
                scrollView
            }
        }
    }

    var scrollView: some View {
        ScrollView(.horizontal, showsIndicators: false) {
            HStack {
                Text("Horizontal list")
                Text("Horizontal list")
                Text("Horizontal list")
                Text("Horizontal list")
            }
        }
        .frame(height: 100)
        .transition(.move(edge: .bottom))
    }
}

将 ScrollView 轴更改为 .vertical 可以防止应用挂起,将过渡更改为不同的边缘(例如 .leading)也可以防止应用挂起。

还有人遇到过类似的事情吗?

最佳答案

您需要配置HStack。

struct ContentView: View {
    @State private var showScroll: Bool = false

    var body: some View {
        VStack {
            Spacer()
            Button(action: {
                withAnimation {
                    self.showScroll = true
                }
            }, label: {
                Text("Hit me")
            }).padding()
                .background(Capsule().fill())
            Spacer()
            if showScroll {
                scrollView
            }
        }
    }

    var scrollView: some View {
        ScrollView(.horizontal, showsIndicators: false) {
            HStack {
                Text("Horizontal list")
                Text("Horizontal list")
                Text("Horizontal list")
                Text("Horizontal list")
            }.frame(maxHeight: .infinity)
        }
        .frame(height: 100)
        .transition(.move(edge: .bottom))
    }
}

关于ios - SwiftUI - 从底部转换时水平 ScrollView 锁定,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59080861/

相关文章:

swift - 如何在 swift 中使用 init 复制 NSSet

ios - userDefaults.setObject 在设备上崩溃但在 iOS 模拟器中没有

ios - AFNetworking 2.0、AFJSONResponseSerializer、AFHTTPResponseSerializer 和并发

ios - 在 Cordova 中检索 Apple ID

ios - 有什么方法可以自定义 iOS SDK 3.0b 中的 FBFriendPickerViewController 吗?

Xcode 链接器命令失败,退出代码为 1

ios - UIScrollView 取消 UIPageViewController 滚动时的手势

android - 当我将 map 放入 Scrollview 时,它会水平移动但不能垂直移动

ios - 如何通过 iOS Swift 3 中的交互处理 UICollectionViewCell 中的 UITableView?

ios - 按下 UIBarButtonItem 时如何检测?