点击列表项的空白处没有任何反应,为啥?

Posted

技术标签:

【中文标题】点击列表项的空白处没有任何反应,为啥?【英文标题】:Nothing happened when tap blank space of the list item, why?点击列表项的空白处没有任何反应,为什么? 【发布时间】:2020-02-18 07:40:57 【问题描述】:

当我点击列表项的任何地方时,我只想做点什么。

点击item的Text()是可以的,但是当我点击item的空白处时,什么都没有发生,为什么?

struct ItemView: View 
    var body: some View 
        HStack 
            Text("Hello")
            Spacer()
            Text("world")
        
    


struct ListView: View 
    var body: some View 
        List() 
            ForEach((1...10).reversed(), id: \.self)  index in
                ItemView().onTapGesture 
                    print("item \(index) taped")
                
            
        
    

-=-=-= 我做了一些实验,它们太奇怪了!!! 如果点击文本 hello,则打印“hello”; 如果点击空白区域,则打印“世界”; 如果点击文本世界,则打印“item 0”;

struct ItemView: View 
    var body: some View 
        HStack 
            Text("Hello").onTapGesture 
                print("hello tapped")
            
            Spacer()
            Button(action: 
                print("world tapped")
            ) 
                Text("world")
            
        
    


struct ListView: View 
    var body: some View 
        List() 
            ForEach((1...10).reversed(), id: \.self)  index in
                ItemView().onTapGesture 
                    print("item \(index) taped")
                
            
        
    

【问题讨论】:

【参考方案1】:

将背景修饰符添加到您的 ItemView 与不透明度

struct ContentView: View 
    var body: some View 
        List() 
            ForEach((1...10).reversed(), id: \.self)  index in
                ItemView()
                    .background(Color.gray.opacity(0.001))
                    .onTapGesture 
                    print("item \(index) taped")
                
            
        
    

【讨论】:

感谢@Mac3n,它有效。但我只是想知道为什么它们在 swiftui 中如此奇怪。 我认为在 SwiftUI 中,Spacer 只是那个间距,而不是可以与之交互的视图。但是是的,这很奇怪【参考方案2】:

使用contentShape(_:eoFill:) 修饰符

【讨论】:

你能说明这在问题的解决方案中是如何工作的吗? 请不要只发布一些工具或库作为答案。至少在答案本身中展示how it solves the problem。 我的回答很完整 这是一个完整的答案吗?在放弃之前,我花了十五分钟试图弄清楚如何使用它。一个完整的答案会告诉你在哪里放置方法调用以及调用它的参数,这两者都没有。 我链接到 Apple 文档;我给出了方法和使用它的权威链接。在我看来,这是完整的,但如果它没有帮助你,那就没有帮助。

以上是关于点击列表项的空白处没有任何反应,为啥?的主要内容,如果未能解决你的问题,请参考以下文章

为啥扁平列表中的空白项目

问题描述:鼠标右键点击桌面空白处不反应或者反应很慢 右键点击图标没有问题

jquery uploadify按钮点击没反应,但点击按钮右边空白才弹出选择文件对话框

为啥 IE 11 显示空白页渲染反应应用

为啥我的反应网络应用程序返回一个白色/空白页面?

为啥在部署我的项目后卡住/空白页面?反应路由器 Dom |参数