.safeAreaInsets 会阻止 iOS17 上 SwiftUI 中的触摸

问题描述 投票:0回答:1

我正在尝试向 ScrollView 添加安全区域,但注意到在 iOS17 上我无法点击 ScrollView 安全区域内的任何内容。

示例代码:

ScrollView {
    VStack {
        ForEach(0..<100, id: \.self) { i in
            Button("Button \(i)") { print("tapped \(i)" ) }
        }
    }
    .frame(maxWidth: .infinity)
}
.safeAreaInset(edge: .top, content: {
    Spacer().frame(width: 0, height: 500)
})

在 iOS17 上运行此程序,将按钮向上滚动到安全区域将使它们不可点击。

除了使用ZStack或overlay之外,在iOS17上还有其他解决方案吗?在我的情况下,这两者都不是一个选项,因为我的主要目标是移动 ScrollView 的刷新指示器,这(据我所知)只能通过安全区域来实现。

button swiftui scrollview safearea
1个回答
0
投票

您可以使用列表吗?这样,无论出于何种原因,它们都可以被点击。现在,您只需使用 SwiftUI 就可以很好地修改列表样式属性。

List(0..<100, id: \.self) { i in
        Button("Button \(i)") { print("tapped \(i)" ) }
    }
    .frame(maxWidth: .infinity)
    .refreshable {
        print("refreshing")
    }
    .safeAreaInset(edge: .top, content: {
        Rectangle().frame(width: 0, height: 500)
    })

或者,如果您只需要将刷新指示器放在不同的位置,则可以使用默认的 ProgressView() 将其放置在任意位置。比如,

if refreshing {
   ProgressView()
}
© www.soinside.com 2019 - 2024. All rights reserved.