首页 > 解决方案 > iOS 14 AssistiveTouch Dwell Control 有时不适用于 SwiftUI 按钮

问题描述

我有一个使用常规Button视图的 SwiftUI 应用程序,我们的客户经常使用 AssistiveTouch 的 DwellControl 功能。在 iOS 13 上 DwellControl 工作正常,但在 iOS 14 beta 8 上 DwellControl 无法点击这些按钮。

可以用手指轻敲按钮并使用普通鼠标单击,但不能使用 DwellControl 功能。

我曾尝试添加可访问性特征,例如isButton,但没有任何效果。

有没有人遇到过同样的问题并且有解决方案或任何见解?我知道这是非常利基的,但任何帮助表示赞赏!

编辑:

我用一个非常简单的例子对其进行了测试,包括一个按钮,它工作正常。在我的特定应用程序中,这似乎是某种副作用。

我有几个ZStacks 显示和隐藏一些视图,如模态框和弹出框。这可能是失败的根源吗?

我不明白的是s可以Button被点击...Button

我已经尝试ReleaseDebug构建了它并没有什么不同。

当 DwellControl 被激活并且光标位于Button应点击的那个时,点击也不起作用。但是当光标不在 附近时Button,点击可以正常工作。

我已通过反馈向 Apple 发送报告。

编辑:

我找到了原因。ScrollView 以某种方式阻止了所有 DwellControl 点击的发生。每当 ScrollView 出现在某个视图中的某个位置时,就会发生这种情况。

最小的例子:

struct ContentView: View {
    @State var show = false
    
    var body: some View {
        ZStack {
            ScrollView {
                Button(action: {
                    print("This should be printed but isn't....")
                }, label: {
                    Text("Button in ScrollView")
                })
            }
        }
    }
}

我知道它的利基,但也许有人需要这个。

还有其他组件受到影响并导致相同的行为:

对我来说这是一个大问题,因为我们的客户经常使用 DwellControl。

编辑:

这可以在最新的 iOS 14.2 beta 1 中复制:

import SwiftUI

@main
struct TempSwitUIApp: App {
    @State private var text: String = "I am a text"
    
    var body: some Scene {
        WindowGroup {
                Button(action: {
                    print("\(UUID()) \(self.text)")
                }, label: {
                    Text("Print text to the console")
                })
            TextField("Hello", text: self.$text)
        }
    }
}

我更新了我与 Apple 的问题,但还没有收到他们的消息。

标签: swiftuiios14assistive

解决方案


推荐阅读