Swift:TextFields 总是显示布局约束错误 [重复]

Posted

技术标签:

【中文标题】Swift:TextFields 总是显示布局约束错误 [重复]【英文标题】:Swift: TextFields always show layout-constraint error [duplicate] 【发布时间】:2020-05-08 19:51:57 【问题描述】:

我正在创建一个带有 UIView 的 iPad-App,其中包含两个 UITextFields。 每当我运行我的应用程序并单击UITextFields 之一,然后单击另一个(顺序无关紧要)时,它总是会抛出一个错误,它必须打破约束。 我什至完全放了两个UIView 上的新UITextFields 完全没有任何约束,它仍然向我显示该错误。

[LayoutConstraints] Unable to simultaneously satisfy constraints.
(
    "<NSLayoutConstraint:0x600003db4c80 'assistantHeight' TUISystemInputAssistantView:0x7fdc1f423400.height == 55   (active)>",
    "<NSLayoutConstraint:0x600003dae940 'assistantView.bottom' TUISystemInputAssistantView:0x7fdc1f423400.bottom == _UIKBCompatInputView:0x7fdc1f21bb20.top   (active)>",
    "<NSLayoutConstraint:0x600003dae8f0 'assistantView.top' V:|-(0)-[TUISystemInputAssistantView:0x7fdc1f423400]   (active, names: '|':UIInputSetHostView:0x7fdc1f432480 )>",
    "<NSLayoutConstraint:0x600003da4d70 'inputView.top' V:|-(0)-[_UIKBCompatInputView:0x7fdc1f21bb20]   (active, names: '|':UIInputSetHostView:0x7fdc1f432480 )>"
)

Will attempt to recover by breaking constraint 
<NSLayoutConstraint:0x600003dae940 'assistantView.bottom' TUISystemInputAssistantView:0x7fdc1f423400.bottom == _UIKBCompatInputView:0x7fdc1f21bb20.top   (active)>

我什至尝试了符号断点,您可以获得更详细的报告,但我找不到任何线索,这里有什么问题:

UIWindow:0x7fa39f3092a0
|   UITransitionView:0x7fa39f20f360
|   |   UIDropShadowView:0x7fa39f20fa40
|   |   |   UIView:0x7fa39f20f880
|   |   |   |   •UIView:0x7fa39f20b690
|   |   |   |   |   *<UILayoutGuide: 0x6000010e47e0 - "UIViewSafeAreaLayoutGuide", layoutFrame = 0, 24, 834, 1088, owningView = <UIView: 0x7fa39f20b690; frame = (0 0; 834 1112); autoresize = W+H; layer = <CALayer: 0x600002914fa0>>>
|   |   |   |   |   *UILabel:0x7fa39f20c590'Patient:'
|   |   |   |   |   *UITextField:0x7fa3a1025c00
|   |   |   |   |   |   _UITextFieldRoundedRectBackgroundViewNeue:0x7fa39f20ba90
|   |   |   |   |   |   *_UIBaselineLayoutStrut:0x7fa3a190a320
|   |   |   |   |   |   _UITextFieldCanvasView:0x7fa39f20b340
|   |   |   |   |   *UITextField:0x7fa39f83be00
|   |   |   |   |   |   _UITextFieldRoundedRectBackgroundViewNeue:0x7fa39f20b140
|   |   |   |   |   |   *_UIBaselineLayoutStrut:0x7fa3a1909cb0
|   |   |   |   |   |   UIFieldEditor:0x7fa3a2815000
|   |   |   |   |   |   |   _UITextFieldCanvasView:0x7fa39f20c1f0
|   |   |   |   |   |   |   |   UITextSelectionView:0x7fa39e40a100
|   |   |   |   |   *UIButton:0x7fa39f708b60'Start'
|   |   |   |   |   |   UIButtonLabel:0x7fa3a19063d0'Start'
|   |   |   |   |   *UILabel:0x7fa39f20d200'Sitzung:'
|   |   |   |   |   *UILabel:0x7fa39f709de0'Felder dürfen nicht leer ...'
|   |   |   |   |   *UIButton:0x7fa39f20d480'Daten'
|   |   |   |   |   |   UIButtonLabel:0x7fa3a1909300'Daten'

有什么我遗漏的东西,或者解决该错误的方法吗?我的项目中的其他 TextField 也有同样的问题,我尝试了所有方法,从将 TextField 放入新视图或添加/删除约束。

【问题讨论】:

【参考方案1】:

问题是您还指定了高度约束,因此您可以删除高度约束或底部约束。否则还有另一种解决方案,您可以将高度约束设置为不是“等于”而是“大于”,以确保文本字段永远不会与下面的视图重叠

【讨论】:

我通常设置纵横比和宽度等于自动布局的视图,高度不应该由纵横比设置吗? 是的,可以通过纵横比设置,但是这种情况下,当不能同时满足高度约束和底部约束时,可以降低其中一个约束的优先级或者将底部约束更改为大于 我都试过了,改变高度和宽度优先级并将它们设置为“大于或等于”,没有任何改变。奇怪的是,它仅在我单击 TextField 时发生,当我使用 Tab 进入下一个时,没有出现错误...【参考方案2】:

布局约束错误信息与你的布局无关。

这是输入助手视图的内部问题(可能被视为错误) - 键盘上方显示的自动完成选项。

【讨论】:

哦,好的,谢谢,很高兴知道。有没有办法解决这个问题,例如禁用自动完成会消除错误吗? 是 - 在 Storyboard 中设置 Correction: No 或通过代码设置 textView.autocorrectionType = .no 希望能解决它,但我从一开始就关闭了更正,我也在代码中尝试过,遗憾的是没有任何改变。不过还是谢谢你的建议。 非常好。将“更正”和“拼写检查”设置为 NO 后,这解决了我的问题。

以上是关于Swift:TextFields 总是显示布局约束错误 [重复]的主要内容,如果未能解决你的问题,请参考以下文章

在 Swift 中以编程方式隐藏 TextFields?

Swift UIView 自动布局和约束

SwiftUI 软件键盘 + 两个 TextFields = 约束冲突

Swift 自动布局在 Xcode 9.3 中不起作用

标签显示超出我的自定义 TableViewCell 范围并通过 swift 设置自动布局

Swift Xcode 自动布局约束仅针对 iphone 6 plus 和 ipad