我不明白为什么DragGesture
在 VStack/HStack/ZStack 上不起作用。考虑以下简单示例:
struct ContentView: View {
@State private var offset = CGSize.zero
var body: some View {
VStack {
Text("Hello World!")
}
.frame(width: UIScreen.main.bounds.size.width, height: UIScreen.main.bounds.size.height)
.edgesIgnoringSafeArea(.all)
.offset(y: offset.height)
.gesture(DragGesture()
.onChanged { val in
self.offset = val.translation
}
.onEnded { val in
self.offset = .zero
}
)
}
}
Run Code Online (Sandbox Code Playgroud)
我希望整个视图根据offset
var上下移动(由拖动手势改变)。但是,即使我写.gesture
上的修饰VStack
,甚至如果VStack
是全屏幕(得益于.frame
修改)拖动动作将不会在工作VStack
。该手势仅在我拖动“Hello world”文本时有效,但如果我拖动到外部Text
(但仍在全屏内部VStack
)则无响应。有任何想法吗?谢谢。
我TabView
在 SwiftUI 中有一个,PageViewTabStyle
所以我可以在页面之间滑动。我想要一个将当前视图“锁定”到位的设置,因此用户无法滑动。谷歌搜索和阅读文档对我来说没有任何明显的意义,所以我希望 SO 上的大师可以帮助我。
简而言之,我的代码看起来像
TabView {
ForEach(0..<5) { idx in
Text("Cell: \(idx)")
}
}
.tabViewStyle(PageTabViewStyle())
Run Code Online (Sandbox Code Playgroud)
我找到了该disabled
属性,但随后似乎整个视图中的所有点击事件都被忽略了 - 我只是想阻止用户切换选项卡(或者,在这种特殊情况下,滑动或按下页面点来切换页面)。我已经尝试了从此处将gesture
属性设置为的解决方案nil
,但这似乎并没有真正阻止滑动手势更改页面(不过这indexDisplayMode
点很好!)
任何帮助是极大的赞赏!谢谢!
TabView(selection: $vm.selectedTab) {
PlanCard_PositiveDay(vm: vm).tag(0)
PlanCard_CountdownDay().tag(1)
PlanCard_Basalkcal().tag(2)
PlanCard_ActivityDiet().tag(3)
PlanCard_Schedule().tag(4)
PlanCard_WeightTarget().tag(5)
}
.tabViewStyle(PageTabViewStyle.init(indexDisplayMode: .never))
Run Code Online (Sandbox Code Playgroud)
我使用带有 PageTabViewStyle 的 TabView 来构建 pageView,但我想单击某个按钮来更改位置,而不是自动滚动以使用手指手势更改位置,因此我想禁用自动滚动,如何更新我的代码以实现此目的
谢谢!
我在 SwiftUI 应用程序中使用选项卡视图。我想禁用其向左滑动并写入以移至其他页面。我检查了这个答案,也检查了这个,但没有一个有效。他们正在使用
.gesture(DragGesture())
这将禁用向左滑动。我想禁用向左和向右滑动。
我也尝试过:
.禁用(真)
这会禁用整个视图。我的视图上有一些按钮可以执行一些任务。这也让他们失去了能力。
我的代码是:
@State var selectedIndex = 0
var body: some View {
TabView(selection: $selectedIndex) {
FirstView().tag(0).gesture(DragGesture())
SecondView().tag(1).gesture(DragGesture())
ThirdView().tag(2).gesture(DragGesture())
}.tabViewStyle(.page(indexDisplayMode: .never))
}
Run Code Online (Sandbox Code Playgroud)
我的FirstView代码是:
func firstView() -> some View {
VStack(alignment: .leading) {
HStack {
Text("Is this a live claim?")
.font(.custom(InterFont.bold.rawValue, size: 24))
Spacer()
}.padding()
Spacer()
BlueButton(title: "Continue") {
print("pressed")
}.padding()
}.ignoresSafeArea(edges: .top)
}
Run Code Online (Sandbox Code Playgroud)
我的SecondView代码是:
func …
Run Code Online (Sandbox Code Playgroud)