Mac Catalyst 应用程序中的文本字段下方出现奇怪的透明视图

问题描述 投票:0回答:1

我正在从现有的 iOS 应用程序创建 Mac Catalyst 应用程序。我的问题是这个奇怪的透明视图出现在我的安全文本字段下方。当文本字段通过单击文本字段获得焦点、输入一个或多个字符并删除文本字段中的每个字符时,它就会出现。 iOS 上不会发生这种情况。该应用程序全部是 UIKit 和 Swift,不涉及 SwiftUI。

在第一张图片中,您可以看到文本字段中有一个字符。

当我删除它时,就会出现这个奇怪的视图。我无法通过单击应用程序窗口中的其他位置来删除此视图。不过,我可以通过切换到另一个应用程序或按退出键来删除它。

在第三张图片中,您可以在白色背景上看到此透明视图/面板/窗口的另一个实例,可以更清楚地看到它。

不幸的是,不可能在 Xcode 的“Dubug View Hierarchy”中捕获它,因为应用程序进入后台后视图就消失了。

用户 rene 似乎有完全相同的问题,但他使用的是 SwiftUI,而我不使用。

我阅读了有关类似问题的帖子,它们似乎可以通过告诉安全 UITextField 它的“textContentType”是“.oneTimeCode”或除“.password”之外的任何其他内容来解决,但这个想法并没有帮助我解决我的问题。我尝试设置“textContentType”,也尝试设置“keyboardType”。两种方法都未能解决我的问题。

我的印象是操作系统试图向我提供“密码”功能,这样我就不必输入密码,但这只是一个理论,因为我没有看到灰色的视图说“密码”。

用户Eddie Ed提到了类似的问题但尚未得到任何答案。

也许这只是 Catalyst 的一个错误,我不知道。我还没有提交雷达。希望有帮助的人有一个想法或遇到并以某种方式解决这个问题。任何帮助表示赞赏。谢谢你。

ios swift macos uitextfield mac-catalyst
1个回答
0
投票

我想出了这个解决方法:

func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool {
    let backspaceWasPressed = string == ""

    if backspaceWasPressed && textField.text?.count == 1 {
        textField.text = ""
        return false
    }

    return true
}

看起来防止这里的默认行为有帮助。

© www.soinside.com 2019 - 2024. All rights reserved.