无法同时满足约束
Posted
技术标签:
【中文标题】无法同时满足约束【英文标题】:Unable to simultaneously satisfy constraints 【发布时间】:2013-07-23 07:21:36 【问题描述】:实际上使用 xib 集成了相机应用程序,因为我将 uiview 放在一个视图上,然后我放置了 imageview,再次在 imageview 上查看以进行裁剪。然后运行我得到这个错误的项目。
2013-07-23 12:45:49.936 Camera_App1[30668:907] 。以下列表中的至少一个约束可能是您不想要的。试试这个:(1)查看每个约束并尝试找出您不期望的; (2) 找到添加了一个或多个不需要的约束的代码并修复它。 (注意:如果您看到不理解的 NSAutoresizingMaskLayoutConstraints,请参阅 UIView 属性 translatesAutoresizingMaskIntoConstraints 的文档)
(
"<NSAutoresizingMaskLayoutConstraint:0x1f5b3d10 h=--& v=--& V:[UIView:0x1f5a2f70(460)]>",
"<NSLayoutConstraint:0x1f5a3c80 V:[UIView:0x1f5a31b0]-(385)-| (Names: '|':UIView:0x1f5a3120 )>",
"<NSLayoutConstraint:0x1f5a3f80 V:|-(0)-[UIView:0x1f5a3120] (Names: '|':UIView:0x1f5a2f70 )>",
"<NSLayoutConstraint:0x1f5a3f40 V:[UIView:0x1f5a3120]-(63)-| (Names: '|':UIView:0x1f5a2f70 )>",
"<NSLayoutConstraint:0x1f5a3bc0 V:|-(61)-[UIView:0x1f5a31b0] (Names: '|':UIView:0x1f5a3120 )>"
)
Will attempt to recover by breaking constraint
<NSLayoutConstraint:0x1f5a3c80 V:[UIView:0x1f5a31b0]-(385)-| (Names: '|':UIView:0x1f5a3120 )>
Break on objc_exception_throw to catch this in the debugger.
The methods in the UIConstraintBasedLayoutDebugging category on UIView listed in <UIKit/UIView.h> may also be helpful.
2013-07-23 12:45:58.697 Camera_App1[30668:907] media type=public.image
2013-07-23 12:45:58.701 Camera_App1[30668:907] global=public.image
2013-07-23 12:45:58.858 Camera_App1[30668:907] 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. (Note: If you're seeing NSAutoresizingMaskLayoutConstraints that you don't understand, refer to the documentation for the UIView property translatesAutoresizingMaskIntoConstraints)
(
"<NSLayoutConstraint:0x1f5a3c80 V:[UIView:0x1f5a31b0]-(385)-| (Names: '|':UIView:0x1f5a3120 )>",
"<NSLayoutConstraint:0x1f5a3f80 V:|-(0)-[UIView:0x1f5a3120] (Names: '|':UIView:0x1f5a2f70 )>",
"<NSLayoutConstraint:0x1f5a3f40 V:[UIView:0x1f5a3120]-(63)-| (Names: '|':UIView:0x1f5a2f70 )>",
"<NSLayoutConstraint:0x1f5a3bc0 V:|-(61)-[UIView:0x1f5a31b0] (Names: '|':UIView:0x1f5a3120 )>",
"<NSAutoresizingMaskLayoutConstraint:0x1f53a430 h=--& v=--& V:[UIView:0x1f5a2f70(460)]>"
)
Will attempt to recover by breaking constraint
<NSLayoutConstraint:0x1f5a3c80 V:[UIView:0x1f5a31b0]-(385)-| (Names: '|':UIView:0x1f5a3120 )>
Break on objc_exception_throw to catch this in the debugger.
The methods in the UIConstraintBasedLayoutDebugging category on UIView listed in <UIKit/UIView.h> may also be helpful.
【问题讨论】:
Getting weird error talking about constraints in Xcode的可能重复 关于约束问题的最佳答案在这里:Unable to simultaneously satisfy constraints, will attempt to recover by breaking constraint 【参考方案1】:错误就是它所说的,并为您开始调试提供了非常明确的说明。有两个冲突的约束。每个都指示 Auto Layout 运行时执行与另一个相矛盾的操作。
如果您以编程方式创建和添加视图,那么 Auto Resizing 属性很可能已自动转换为 Auto Layout 约束。
所以,首先要尝试的是,使用您以编程方式创建的视图,通过设置禁用此功能:
myProgrammaticView.translatesAutoresizingMaskIntoConstraints = NO;
【讨论】:
如果我想在没有任何限制的情况下使用一个特定的视图,我该如何避免警告... 如果视图没有约束则不会有警告 我想要约束以及我想要使用自动调整大小的掩码而不发出警告。【参考方案2】:我遇到了同样的问题,经过几个小时的搜索,原来问题是因为通话或热点状态栏被切换,(热点已打开,正在通话中),要解决问题,在 appdelegate I补充:
func application(application: UIApplication, willChangeStatusBarFrame newStatusBarFrame: CGRect)
let windows = UIApplication.sharedApplication().windows
for window in windows
window.removeConstraints(window.constraints)
【讨论】:
谢谢!这也解决了我的问题。但是,当我尝试另一种情况时,将通话状态栏保持打开(更宽的绿色栏),然后启动应用程序,尝试切换它,我再次看到错误。你也这么看吗?【参考方案3】:试试这个步骤,对我有帮助。
选择您的对象 > 编辑器 > 解决自动布局问题 > 重置为建议的约束
【讨论】:
【参考方案4】:我知道这个帖子很老了,但这是我的经验和解决方案。
选择视图(UILabel、UIImage 等)编辑器 > 固定 >(选择...)到 Superview 编辑器 > 解决自动布局问题 > 添加缺少的约束
此错误是您添加的约束之间发生冲突。删除不需要的约束。不要在同一方向和类型上使用多个约束。
我建议您使用 SnapKit。是一个Autolayout框架,用起来很方便
import SnapKit
var label = UILabel()
label.snp_makeConstraints (make) -> Void in
make.centerX.equalTo(0)
make.centerY.equalTo(0)
make.width.equalTo(30)
make.height.equalTo(30)
https://github.com/SnapKit/SnapKit希望这有帮助:)
【讨论】:
【参考方案5】:在我的情况下,由于导航栏,我收到了这个错误。添加新 UIViewController 导致此错误。
我删除了旧的导航栏,然后通过转到 编辑器 ➞ 嵌入 ➞ 导航控制器.
【讨论】:
【参考方案6】:我重置为建议的约束,它解决了问题,see here.
选择您的对象 > 编辑器 > 解决自动布局问题 > 重置为建议的约束
【讨论】:
以上是关于无法同时满足约束的主要内容,如果未能解决你的问题,请参考以下文章