Xcode提示Unable to simultaneously satisfy constraints. Probably at least one of the constraints in the following list is one you don’t want.
Xcode提示Unable to simultaneously satisfy constraints. Probably at least one of the constraints in the following list is one you don’t want.

Xcode提示Unable to simultaneously satisfy constraints. Probably at least one of the constraints in the following list is one you don’t want.

问题报错

Unable to simultaneously satisfy constraints.
    Probably at least one of the constraints in the following list is one you don't want. 
    Try this: 
        (1) look at each constraint and try to figure out which you don't expect; 
        (2) find the code that added the unwanted constraint or constraints and fix it. 
(
    "<NSLayoutConstraint:0x6000021452c0 'accessoryView.bottom' _UIRemoteKeyboardPlaceholderView:0x105e4ef70.bottom == _UIKBCompatInputView:0x105e3d3e0.top   (active)>",
    "<NSLayoutConstraint:0x600002161bd0 'assistantHeight' SystemInputAssistantView.height == 45   (active, names: SystemInputAssistantView:0x1061095a0 )>",
    "<NSLayoutConstraint:0x6000021455e0 'assistantView.bottom' SystemInputAssistantView.bottom == _UIKBCompatInputView:0x105e3d3e0.top   (active, names: SystemInputAssistantView:0x1061095a0 )>",
    "<NSLayoutConstraint:0x600002145f40 'assistantView.top' V:[_UIRemoteKeyboardPlaceholderView:0x105e4ef70]-(0)-[SystemInputAssistantView]   (active, names: SystemInputAssistantView:0x1061095a0 )>"
)

Will attempt to recover by breaking constraint 
<NSLayoutConstraint:0x600002145f40 'assistantView.top' V:[_UIRemoteKeyboardPlaceholderView:0x105e4ef70]-(0)-[SystemInputAssistantView]   (active, names: SystemInputAssistantView:0x1061095a0 )>

Make a symbolic breakpoint at UIViewAlertForUnsatisfiableConstraints to catch this in the debugger.
The methods in the UIConstraintBasedLayoutDebugging category on UIView listed in <UIKitCore/UIView.h> may also be helpful.

问题截图

问题描述

我的View视图中,存在两个文本输入框TextField,在频繁点击切换时会报上述错误。

经过对比代码排查定位发现问题为,设置输入框的键盘类型存在约束冲突:

.keyboardType(.decimalPad)

具体代码如下:

// 存钱罐名称
Text(Name)
TextField(inputName, text: $tempPigLetName)  // 绑定内容变量
...

// 目标金额
Text(Target)
TextField(inputTarget, text: $tempPigLettarget)  // 绑定target变量
    .keyboardType(.decimalPad)
...

问题分析

在 iOS 的 SwiftUI 中,当用户与 TextField 交互时,系统会自动管理键盘的显示和隐藏。在输入框聚焦时,键盘会弹出,同时会显示一个输入辅助视图(SystemInputAssistantView),通常包含“完成”、“下一步”、“上一页”等按钮。这些辅助视图与键盘和其他视图之间的布局约束可能会发生冲突,导致类似于本次所遇到的约束冲突问题。

问题总结

目前尝试了以下三种方法:

1、使用 .safeAreaInset 替代 Spacer:

VStack {
        ...
}
.safeAreaInset(edge: .bottom, spacing: 0) {
    	Color.clear.frame(height: 100)
}

将改代码放到VStack {} 的底部。

2、使用 ScrollView:

ScrollView {
VStack {
        ...
    }
}

将VStack {} 嵌套到ScrollView中。

3、使用 GeometryReader 动态调整布局:

GeometryReader { geometry in
    VStack {
        ...
    }
    .frame(width: geometry.size.width, height: geometry.size.height)
    .ignoresSafeArea(.keyboard)  // 处理键盘安全区域
}

但这三种方案,经测试发现仍然会报错。

因此,对该问题进暂做归档,不细究,目前来看不会对Xcode产生影响。

如果您认为这篇文章给您带来了帮助,您可以在此通过支付宝或者微信打赏网站开放者。

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注