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 总是显示布局约束错误 [重复]的主要内容,如果未能解决你的问题,请参考以下文章
SwiftUI 软件键盘 + 两个 TextFields = 约束冲突