如何在 SwiftUI 中使模态不可关闭
Posted
技术标签:
【中文标题】如何在 SwiftUI 中使模态不可关闭【英文标题】:How to make modal non-dismissible in SwiftUI 【发布时间】:2020-02-12 08:53:55 【问题描述】:我正在创建一个应用程序,我在其中创建了第一个屏幕(它将是应用程序的简短描述),并且在屏幕上我有一个下一个按钮,如果我点击下一个按钮,它应该被关闭,否则它也不能被关闭下拉。
如果用户拉下一张纸,它应该再次重新定位。
问题是,用户可以通过向下滑动模式来关闭模式,并且应用程序仪表板屏幕显示应该被阻止。
我们如何防止通过下拉关闭模型。
struct ModalView : View
@Environment(\.presentationMode) var presentationMode
var body: some View
Rectangle()
.fill(Color.orange)
.frame(width: 400, height: 650)
.overlay(
VStack
Button(action:
self.presentationMode.wrappedValue.dismiss()
)
HStack
Image(systemName: "chevron.left")
Text("Dismiss")
.padding(10.0)
.overlay(
RoundedRectangle(cornerRadius: 10.0)
.stroke(lineWidth: 2.0)
)
.accentColor(.white)
)
.border(Color.blue)
.gesture( DragGesture())
内容视图
struct ContentView: View
//MARK: Properties
//isPresented:- Present's a Welcome Screen in the form of cards.
@State private var isPresented = true
var body: some View
VStack
DashboardView()
.sheet(isPresented: $isPresented)
//IntroductionView(isPresentingSheet: self.$isPresented)
ModalView()
仪表板视图
struct DashboardView: View
var body: some View
Text("Hello SwiftUI")
【问题讨论】:
【参考方案1】:你可以试试这个解决方案:
struct ModalWrapper: View
var body: some View
ModalView().highPriorityGesture(DragGesture())
struct ModalView : View
@Environment(\.presentationMode) var presentationMode
var body: some View
Rectangle()
.fill(Color.orange)
.frame(width: 400, height: 650)
.overlay(
VStack
Button(action:
self.presentationMode.wrappedValue.dismiss()
)
HStack
Image(systemName: "chevron.left")
Text("Dismiss")
.padding(10.0)
.overlay(
RoundedRectangle(cornerRadius: 10.0)
.stroke(lineWidth: 2.0)
)
.accentColor(.white)
)
.border(Color.blue)
.highPriorityGesture(DragGesture())
struct ContentView: View
//MARK: Properties
//isPresented:- Present's a Welcome Screen in the form of cards.
@State private var isPresented = true
var body: some View
VStack
DashboardView()
.sheet(isPresented: $isPresented)
//IntroductionView(isPresentingSheet: self.$isPresented)
ModalWrapper()
struct DashboardView: View
var body: some View
Text("Hello SwiftUI")
这里我添加了ModalWrapper
用于包装模态视图,否则您必须将highPriorityGesture(DragGesture())
添加到ModalView
的所有子视图中,所以最好保留一个包装视图。
希望这会对你有所帮助。
【讨论】:
当我下拉或(Drag Down ModalView,它正在关闭。它不应该关闭。当我单击关闭按钮时,ModelView 屏幕应该关闭。 请试试这个对我有用的解决方案。我正在使用 Xcode 11.3.1 并在 ios13 和 lator 中进行了测试。【参考方案2】:这里有更优雅的答案:Prevent dismissal of modal view controller in SwiftUI
(不看接受的)
【讨论】:
以上是关于如何在 SwiftUI 中使模态不可关闭的主要内容,如果未能解决你的问题,请参考以下文章
如何防止工作表在 SwiftUI 中使其后面的视图变暗或删除不必要的填充?