为什么 SwiftUI 中的 .gesture() 不能用于我的整个模态视图?
Why .gesture() in SwiftUI can not be used on my entire modal view?
我有一个使用 SwiftUI 的非常简单的 LostPasswordView。此表单作为模态视图呈现。我使用 .onTapGesture 和 DragGesture() 关闭键盘。
问题是只有 TextField 周围的一小部分视图响应这些手势。这不会改善用户体验,因为它混淆了这些操作的工作位置。
为什么我不能在所有SwiftUI模态视图上使用手势?我在想这可能是因为已经有一个向下滑动的手势来关闭模态视图...
import SwiftUI
//MARK: Lost password view presented as a modal
struct LostPasswordView: View {
@State var email = ""
var body: some View {
//MARK: User entry
VStack {
///email
UserEntryTextField(title: TextFieldName.email.rawValue,
userEntry: email
)
.padding(.top, 198)
Spacer()
//MARK: Modify password button
MainButton(action: {},
title: .modifyPassword)
}
.padding(.bottom)
.onTapGesture {
self.dismissKeyboard()
}.simultaneousGesture(
DragGesture().onChanged({ (_) in
self.dismissKeyboard()
}))
}
}
//MARK: Dismiss keyboard
extension LostPasswordView {
func dismissKeyboard() {
UIApplication.shared.dismissKeyboard()
}
}
如下所示为您的 VStack
指定 .frame
修饰符(您可能需要一些背景知识,因为透明容器不跟踪事件)
VStack {
...
}
.background(Color.white)
.frame(maxWidth: .infinity, maxHeight: .infinity, alignment: .center)
我有一个使用 SwiftUI 的非常简单的 LostPasswordView。此表单作为模态视图呈现。我使用 .onTapGesture 和 DragGesture() 关闭键盘。
问题是只有 TextField 周围的一小部分视图响应这些手势。这不会改善用户体验,因为它混淆了这些操作的工作位置。
为什么我不能在所有SwiftUI模态视图上使用手势?我在想这可能是因为已经有一个向下滑动的手势来关闭模态视图...
import SwiftUI
//MARK: Lost password view presented as a modal
struct LostPasswordView: View {
@State var email = ""
var body: some View {
//MARK: User entry
VStack {
///email
UserEntryTextField(title: TextFieldName.email.rawValue,
userEntry: email
)
.padding(.top, 198)
Spacer()
//MARK: Modify password button
MainButton(action: {},
title: .modifyPassword)
}
.padding(.bottom)
.onTapGesture {
self.dismissKeyboard()
}.simultaneousGesture(
DragGesture().onChanged({ (_) in
self.dismissKeyboard()
}))
}
}
//MARK: Dismiss keyboard
extension LostPasswordView {
func dismissKeyboard() {
UIApplication.shared.dismissKeyboard()
}
}
如下所示为您的 VStack
指定 .frame
修饰符(您可能需要一些背景知识,因为透明容器不跟踪事件)
VStack {
...
}
.background(Color.white)
.frame(maxWidth: .infinity, maxHeight: .infinity, alignment: .center)