【问题标题】:How to make List Item row with a button inside not clickable in Swift UI?如何在 Swiftui 中使用不可点击的按钮制作列表项行?
【发布时间】:2020-08-31 22:58:57
【问题描述】:

有没有办法让列表的整行都不可点击?

我正在尝试使按钮行上只有按钮是可点击的。

如您所见,如果我尝试点击按钮所在行中的任意位置,无论是在按钮本身上,还是在其周围的空白处,它都会将其视为点击:

有没有办法让你只能点击按钮本身,而不是它周围的白色间距? (即行本身)

这是代码:

import SwiftUI

struct ContentView: View {
    var body: some View {
        NavigationView {
            List {
                NavigationLink(destination: Text("Next screen")) {
                    Text("Item")
            }
            Button(action: {}) {
                Text("Button")
            }
            .padding(.vertical, 12)
            .frame(maxWidth: .infinity)
            .background(Color(UIColor.secondarySystemBackground))
            }
        }
    }
}

是的,在这个实现中,我绝对必须将这些元素放在 List 中,所以我真的没有任何其他选择(例如,通常使用 VStack

【问题讨论】:

    标签: swiftui


    【解决方案1】:

    使其成为非默认按钮样式,例如普通或您的自定义

    Button(action: {}) {
        Text("Button")
           .frame(maxWidth: .infinity, maxHeight: .infinity)
           .contentShape(Rectangle())
    }
    .buttonStyle(PlainButtonStyle())  // << here !!
    

    另请参阅this 帖子,例如使用自定义按钮样式进行类似操作

    【讨论】:

    • 我现在不能点击整行,但它不会让我点击按钮。有没有办法可以在不点击白色部分的情况下点击按钮?
    • 我最初检查了它,并且该按钮可以点击。现在在 SwiftUI 中是否没有办法在按钮可点击时使按钮周围的空间不可点击?还是列出了在这里使用的错误工具?
    • @pizzae,这只是因为在提供的代码中,按钮是行宽的。将其包裹在 VStack 中并减小宽度,并且只能在按钮中单击。
    • 这对我有用,谢谢。但为什么这行得通?这似乎很愚蠢。将按钮样式指定为默认样式如何改变列表单元格处理触摸的方式?是我想多了还是有点小龙虾?
    • 也为我工作!
    猜你喜欢
    • 2012-06-25
    • 2021-04-26
    • 2020-02-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多