【发布时间】:2020-12-04 19:09:59
【问题描述】:
我正在尝试将代码应用到this 问题的已接受答案中,以了解如何使 SwiftUI TextField 成为第一响应者。这是从该答案复制的代码,我尝试在 xcode 中使用:
struct CustomTextField: UIViewRepresentable {
class Coordinator: NSObject, UITextFieldDelegate {
@Binding var text: String
var didBecomeFirstResponder = false
init(text: Binding<String>) {
_text = text
}
func textFieldDidChangeSelection(_ textField: UITextField) {
text = textField.text ?? ""
}
}
@Binding var text: String
var isFirstResponder: Bool = false
func makeUIView(context: UIViewRepresentableContext<CustomTextField>) -> UITextField {
let textField = UITextField(frame: .zero)
textField.delegate = context.coordinator
return textField
}
func makeCoordinator() -> CustomTextField.Coordinator {
return Coordinator(text: $text)
}
func updateUIView(_ uiView: UITextField, context: UIViewRepresentableContext<CustomTextField>) {
uiView.text = text
if isFirstResponder && !context.coordinator.didBecomeFirstResponder {
uiView.becomeFirstResponder()
context.coordinator.didBecomeFirstResponder = true
}
}
}
但是,运行该代码会给我一个运行时错误,提示“无法同时满足约束条件”。错误如下所示。
在makeUIView中
在 onEditingChanged 中的 updateUIView 2020-08-14 16:02:48.445045-0600 OpenRussian[2965:122005] [LayoutConstraints] 无法同时 满足约束。可能至少有一个约束条件 以下列表是您不想要的。试试这个:(1)看每个 约束并尝试找出您不期望的; (2) 找到 添加不需要的约束或约束的代码并修复它。 ( "<0x600002580d20 tuisysteminputassistantview:0x7fde585064a0.height="="><0x600002591b30 tuisysteminputassistantview:0x7fde585064a0.bottom="=" _uikbcompatinputview:0x7fde51b78c50.top><0x600002591ae0 v:><0x600002591720 v:>0x600002591720>0x600002591ae0>0x600002591b30>0x600002580d20>
<0x600002591b30 tuisysteminputassistantview:0x7fde585064a0.bottom="=" _uikbcompatinputview:0x7fde51b78c50.top>0x600002591b30>