我正在从现有的 iOS 应用程序创建 Mac Catalyst 应用程序。我的问题是这个奇怪的透明视图出现在我的安全文本字段下方。当文本字段通过单击文本字段获得焦点、输入一个或多个字符并删除文本字段中的每个字符时,它就会出现。 iOS 上不会发生这种情况。该应用程序全部是 UIKit 和 Swift,不涉及 SwiftUI。
当我删除它时,就会出现这个奇怪的视图。我无法通过单击应用程序窗口中的其他位置来删除此视图。不过,我可以通过切换到另一个应用程序或按退出键来删除它。
在第三张图片中,您可以在白色背景上看到此透明视图/面板/窗口的另一个实例,可以更清楚地看到它。
不幸的是,不可能在 Xcode 的“Dubug View Hierarchy”中捕获它,因为应用程序进入后台后视图就消失了。
用户 rene 似乎有完全相同的问题,但他使用的是 SwiftUI,而我不使用。
我阅读了有关类似问题的帖子,它们似乎可以通过告诉安全 UITextField 它的“textContentType”是“.oneTimeCode”或除“.password”之外的任何其他内容来解决,但这个想法并没有帮助我解决我的问题。我尝试设置“textContentType”,也尝试设置“keyboardType”。两种方法都未能解决我的问题。
我的印象是操作系统试图向我提供“密码”功能,这样我就不必输入密码,但这只是一个理论,因为我没有看到灰色的视图说“密码”。
用户Eddie Ed提到了类似的问题但尚未得到任何答案。
也许这只是 Catalyst 的一个错误,我不知道。我还没有提交雷达。希望有帮助的人有一个想法或遇到并以某种方式解决这个问题。任何帮助表示赞赏。谢谢你。
我想出了这个解决方法:
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
}
看起来防止这里的默认行为有帮助。