Ios 在不关闭键盘的情况下在文本字段之间切换时Xcode约束中断
我已经在Xcode中与一个问题斗争了几天,但我不知道出了什么问题。我创建了一个简单的UIViewcontroller,其中包含三个单独的文本字段。当我在模拟器或物理设备上运行应用程序时,当我点击文本字段时,控制台会收到此警告。只有当我点击下一个文本字段而不首先关闭键盘时,才会发生这种情况。如果在每次输入textfield后关闭键盘,则不会出现调试控制台投诉。但如果我不这样做,控制台会在点击下一个文本字段时返回以下内容 “[LayoutConstraints]无法同时满足约束。 可能下面列表中至少有一个约束是您不想要的。 试试这个: (1) 看看每一个约束,试着找出你不期望的; (2) 找到添加了不需要的约束的代码,然后修复它Ios 在不关闭键盘的情况下在文本字段之间切换时Xcode约束中断,ios,swift,xcode,Ios,Swift,Xcode,我已经在Xcode中与一个问题斗争了几天,但我不知道出了什么问题。我创建了一个简单的UIViewcontroller,其中包含三个单独的文本字段。当我在模拟器或物理设备上运行应用程序时,当我点击文本字段时,控制台会收到此警告。只有当我点击下一个文本字段而不首先关闭键盘时,才会发生这种情况。如果在每次输入textfield后关闭键盘,则不会出现调试控制台投诉。但如果我不这样做,控制台会在点击下一个文本字段时返回以下内容 “[LayoutConstraints]无法同时满足约束。 可能下面列表中至少
"<NSLayoutConstraint:0x281f15bd0 'assistantHeight' TUISystemInputAssistantView:0x14602a340.height == 55 (active)>",
"<NSLayoutConstraint:0x281f2de00 'assistantView.bottom' TUISystemInputAssistantView:0x14602a340.bottom == _UIKBCompatInputView:0x1460631d0.top (active)>",
"<NSLayoutConstraint:0x281f2fcf0 'assistantView.top' V:|-(0)-[TUISystemInputAssistantView:0x14602a340] (active, names: '|':UIInputSetHostView:0x143e5cd50 )>",
"<NSLayoutConstraint:0x281f17200 'inputView.top' V:|-(0)-[_UIKBCompatInputView:0x1460631d0] (active, names: '|':UIInputSetHostView:0x143e5cd50 )>"
“”,
"",
"",
""
将尝试通过打破约束进行恢复
在UIViewAlertForUnsatifiableConstraints处创建一个符号断点,以便在调试器中捕获该断点。
中列出的UIView上的UIConstraintBasedLayoutDebugging类别中的方法也可能有帮助。”
我创建了一个新的、干净的UIViewcontroller,里面没有任何内容,只有三个简单的文本字段,我仍然遇到这个问题。我这样做是因为在我最初的项目中,我将文本字段安排在stackview中,并认为这可能导致问题,但显然不是
有人遇到过这个问题吗
非常感谢您的时间和任何帮助 在设置约束时,您可能会遇到问题,所以我已经这样做了,与您类似,并且能够在不关闭键盘的情况下点击下一个文本字段 我已经测试了下面的解决方案。你可以试试这个解决方案 我希望它能解决你的问题
class ViewController: UIViewController {
let nameTextField: UITextField = {
let textField = UITextField()
textField.placeholder = "Enter your name here"
textField.layer.borderWidth = 1
textField.borderStyle = .roundedRect
textField.translatesAutoresizingMaskIntoConstraints = false
return textField
}()
let ageTextField: UITextField = {
let textField = UITextField()
textField.placeholder = "Enter your age here"
textField.keyboardType = .decimalPad
textField.layer.borderWidth = 1
textField.borderStyle = .roundedRect
textField.translatesAutoresizingMaskIntoConstraints = false
return textField
}()
let cityTextField: UITextField = {
let textField = UITextField()
textField.placeholder = "Enter your city name here"
textField.layer.borderWidth = 1
textField.borderStyle = .roundedRect
textField.translatesAutoresizingMaskIntoConstraints = false
return textField
}()
override func viewDidLoad() {
super.viewDidLoad()
self.view.addSubview(nameTextField)
self.view.addSubview(ageTextField)
self.view.addSubview(cityTextField)
NSLayoutConstraint.activate([
//nameTextField
self.nameTextField.topAnchor.constraint(equalTo: self.view.safeAreaLayoutGuide.topAnchor, constant: 100),
self.nameTextField.leadingAnchor.constraint(equalTo: self.view.safeAreaLayoutGuide.leadingAnchor, constant: 16),
self.nameTextField.trailingAnchor.constraint(equalTo: self.view.safeAreaLayoutGuide.trailingAnchor, constant: -16),
//ageTextField
self.ageTextField.topAnchor.constraint(equalTo: self.nameTextField.bottomAnchor, constant: 16),
self.ageTextField.leadingAnchor.constraint(equalTo: self.view.safeAreaLayoutGuide.leadingAnchor, constant: 16),
self.ageTextField.trailingAnchor.constraint(equalTo: self.view.safeAreaLayoutGuide.trailingAnchor, constant: -16),
//cityTextField
self.cityTextField.topAnchor.constraint(equalTo: self.ageTextField.bottomAnchor, constant: 16),
self.cityTextField.leadingAnchor.constraint(equalTo: self.view.safeAreaLayoutGuide.leadingAnchor, constant: 16),
self.cityTextField.trailingAnchor.constraint(equalTo: self.view.safeAreaLayoutGuide.trailingAnchor, constant: -16),
])
}
}
布局约束错误消息与布局无关 这是输入助手视图(键盘上方显示的自动完成选项)的内部问题(可能被认为是一个bug) 如果使用
Debug View Hierarchy
可以找到错误消息中列出的罪魁祸首:tuisystemputasistantview
您可以忽略此错误/警告消息,因为它已超出您的控制范围
编辑
错误/警告消息显示:
"<NSLayoutConstraint:0x281f15bd0 'assistantHeight' TUISystemInputAssistantView:0x14602a340.height == 55 (active)>",
“”,
以下是使用调试视图层次结构可以找到的内容:
正如你所见,“令人不快的因素”是iOS内部功能的一部分,TUISystemInputAssistantView。我认为这是苹果键盘实现中的一个缺陷 因此,解决方法是将文本字段的“自动更正类型”设置为“否”
textField.autocorrectionType=.no如果您的示例中已经有文本,则会出现相同的错误消息。它不应该给出任何错误…它运行正常,尽管我在textField中有文本,但在第一个字段中键入一些文本。。。在第二个领域。。。在第三个领域。。。然后在已经有文本的第一个字段中回击。你会得到错误的。不…我没有得到任何错误在我这边…它运行完美,只需在第一个字段中键入,然后点击第三个字段。。。跳过数字输入字段。所以我无法阻止这种情况发生?它没有破坏应用程序,但仍然是一个奇怪的烦恼。我想一定有很多人遇到了这个问题……你可以通过禁用更正来防止它,但这意味着更正被禁用。如果您的实现不需要,那就太好了。否则,不行,你无能为力。是的,如果你搜索,你会发现关于这个的其他问题。谢谢DonMag,我已经在Interface Builder中将文本输入特征的更正选项设置为“否”,并且仍然会得到相同的消息。我想我只好将就着忽略这个消息了。但愿我没有浪费那么多时间去寻找解决方案,唉。。。再次感谢!这是关于这个主题的后续内容,当我使用Debug视图层次结构时,控制台中会出现更多的“抱怨”。控制台状态为“[External]-[UIInputViewController needsInputModeSwitchKey]在与主机应用程序建立连接之前被调用。这将产生不准确的结果。请确保在初始化主视图控制器后调用它。”它会打印此错误四次,而我不会触摸任何东西。我真的很困惑。还有内在的。。。。在复杂的应用程序中,特别是在使用多线程时,例如,当进入调试视图层次结构时,您可以在控制台中获得大量错误/警告消息。