表单内堆栈内的按钮在边界外处于活动状态
Posted
技术标签:
【中文标题】表单内堆栈内的按钮在边界外处于活动状态【英文标题】:Button within stack within form is active outside of bounds 【发布时间】:2019-11-05 15:37:50 【问题描述】:我在 SwiftUI 中有一些我不理解的奇怪行为,我将其简化为:
struct ContentView: View
@State var name: String = ""
var body: some View
Form
VStack
Text("Line 1")
Text("Line 2")
Text("Line 3")
Text("Line 4")
Button(action:
print("hello world")
) Text("Print hello world")
这使得“第 1 行”...“第 4 行”文本成为“打印你好世界”按钮的一部分。
如果我删除表单中的 VStack,它们不会。
我不确定这是否是 SwiftUI 中的错误,或者我不理解一些我应该尝试理解的东西,所以:有人理解为什么第 1 行...第 4 行会成为此处按钮的一部分吗?
【问题讨论】:
他们想要做的是,当您在表单中放置一个按钮时,您可以通过点击该按钮所在行中的任意位置来激活该按钮。但当然,在你的情况下,这是不可取的!我还不知道解决方法... @cbjeukendrup 一种解决方法是使用 `.onTapGesture // you action 并忽略按钮的操作 【参考方案1】:这不是错误,Form
在底层是 List
,因此当您在其中创建 VStack
时,您会在列表中创建一行,但如果您删除 VStack
,则有 5行(4 个文本和一个按钮)
【讨论】:
那么这是否一定意味着一个列表项应该成为完整的按钮?如果我想要一个底部有一个按钮的列表项怎么办? 该行不会成为整个按钮,但是当您单击该行时,会触发该行中的所有按钮,这似乎是一种正常行为,您不应在一行中放置多个按钮设计。无论如何,有一个变通方法,你可以在Button
上使用.onTapGesture
,这个动作只有在点击按钮时才会触发
多尝试一下,我认为你是对的。我可以在第 1 行添加轻击手势,向按钮添加动作,以及向按钮添加轻击手势,看起来 SwiftUI 会尝试找到最合适的动作来执行。我猜是有道理的。
在我的“相关”部分中有很好的相关答案:***.com/a/58634704/15745以上是关于表单内堆栈内的按钮在边界外处于活动状态的主要内容,如果未能解决你的问题,请参考以下文章
带有大标题的 UISearchController 在选项卡栏中崩溃,“只有一个带有顶部边界的调色板可以在过渡之外处于活动状态”
泰山OFFICE技术讲座:绕排时,形状的左右边界研究,内边界外边界的提出