最新更新:

使用.sheet(isPresented: $绑定的状态变量){View}这种方式。

以下是旧内容:

解决 PresentationButton 不能用的问题

1
2
3
4
5
6
7
8
9
ForEach(courses) { item in
Button(action: {
self.showCourseContent = true
}) {
CourseView()
}.popover(isPresented: .constant(self.showCourseContent)) {
ContentView()
}
}

然后在 struct 文件名 里面,var body: some View 之前,加一句
@State var showCourseContent = false

这种解决方案会造成无法下滑的情况,所以还需要在补充手势

.popover后添加

1
2
3
.gesture(DragGesture().onChanged { value in
self.showCourseContent = false
})

完整代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
ForEach(courses) { item in
Button(action: {self.showCourseContent = true}){
CourseView()
}
.popover(isPresented: .constant(self.showCourseContent)){
ContentView()
.gesture(DragGesture().onChanged { value in
self.showCourseContent = false
})

}

}

记得用ctrl+i整理代码。。。

Bug:
添加全局手势之后可能会与View里面的手势发生冲突,经过测试是优先View里面的手势。
翻了很长时间文档没找到PresentationButton弃用后的更改的接口,所以暂时先这样解决。如果有好的解决方案请联系。