ios 在SwiftUI中单击窗体内的Button时没有点击动画

ru9i0ody  于 2023-07-01  发布在  iOS
关注(0)|答案(1)|浏览(120)

我在SwiftUI中使用了一个基于YouTube教程的表单,并在其中放置了一些组件。但是,当我点击按钮时,当我轻轻点击它一次时,它不会显示点击动画(例如,当我点击iOS设置应用程序中的按钮时,按钮背景会发生变化)。下面是我的代码:

var body: some View {
        Form {
            Section(header: Text("Input:")) {
                TextField("Add Some text here", text: $text)
            }
            
            Section(header: Text("Letter: Count")) {
                let charCount = text.filter({ $0 != " " }).count
                
                if (charCount > 30) {
                    Text(String(charCount)).foregroundColor(.red)
                } else {
                    text == "" ? Text("Empty") : Text(String(charCount))
                }
            }
            
            Section(header: Text("actions")) {
                Button("Save Data") {
                    UserDefaults.standard.set(text, forKey: "TEXT_Key")
                } 
                // When I lightly clicked it, the inner code will be executed, but no visual  effect will be shown.
            }
        }
    }

如果这个问题看起来很傻,请原谅我
我的Xcode版本:14.3(14E222b)。目标器械:iPhone 14 Pro模拟器和iOS 16.5 for True Device
我已经搜索了谷歌,没有找到关于这个具体问题的解释或解决方案。我已经尝试使用Release配置编译代码,但问题仍然存在。
预期的结果是,我的按钮应该像iOS设置应用程序中的按钮一样,即使轻轻点击也会触发背景颜色的变化。

new9mtju

new9mtju1#

这是一个已知的问题与形式,按钮不能正常工作,并没有真实的的修复(据我所知),节细胞将覆盖按钮点击与奇怪的行为,你正在观察。你可以尝试一个“干净”的解决方案,就像我将要发布的那样,但这可能不是你正在寻找的:

Section(header: Text("actions")) {
    HStack { // A that superView will handle the button click instead of the Section cell
        Button(
            action: {
                UserDefaults.standard.set(text, forKey: "TEXT_Key")
            },
            label: {
                Text("Save Data")
                    .frame(maxWidth: .infinity, alignment: .leading) //frame to infinity inside label will apply the button click area to the whole stack
            })
    }
}.buttonStyle(.borderless) //set a buttonStyle on the Section to display the animation correctly
// Clicking the button lightly will not make the classic section animation (turning to gray) but the text will toggle opacity as classic button do.

相关问题