字符串翻译后 AutoLayout 约束冲突

Posted

技术标签:

【中文标题】字符串翻译后 AutoLayout 约束冲突【英文标题】:AutoLayout constraints conflict after strings translation 【发布时间】:2014-09-19 14:33:57 【问题描述】:

在一个运行良好的应用程序中,我只是在代码和情节提要中进行了字符串翻译,然后,我收到了“无法同时满足约束”错误。

错误是:

    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:0x1d5408d0 V:[UIView:0x1d540c40(0)]>",
 "<NSLayoutConstraint:0x1d540910 V:|-(0)-[UIView:0x1d540c40]   (Names: '|':UIView:0x1d541100 )>",
 "<NSLayoutConstraint:0x1d540fd0 V:[UILabel:0x1d541040(21)]>",
 "<NSLayoutConstraint:0x1d5407d0 V:[UIView:0x1d540c40]-(20)-[UILabel:0x1d541040]>",
 "<NSLayoutConstraint:0x1d540710 V:[LTSelectView:0x1d542210]-(360)-|   (Names: '|':UIView:0x1d541100 )>",
 "<NSAutoresizingMaskLayoutConstraint:0x1d5928b0 h=--& v=--& V:[UIView:0x1d541100(416)]>",
 "<NSLayoutConstraint:0x1d540690 V:[UILabel:0x1d541040]-(19)-[LTSelectView:0x1d542210]>"
 )

Will attempt to recover by breaking constraint
<NSLayoutConstraint:0x1d540fd0 V:[UILabel:0x1d541040(21)]>

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.

翻译是否有责任?

我读过一些关于这个主题的帖子,但原因对我来说真的不容易理解。

所以我的对象是:

UI标签: 高度等于 21 宽度等于:220 顶部空间到顶部布局:17 将中心 X 对齐到:superview Selectview 的底部空间:22

LT 选择视图: 宽度等于:160 高度等于:30 将中心 X 对齐到:superview UILabel 的顶部空间:22 UIButton 的底部空间:67

UI按钮: 宽度等于:100 高度等于:30 SelectView 的顶部空间:67 居中对齐:superview

实际上我可以看到 UILabel、UIButton 但看不到 LTSelectView。所以问题肯定在这里。 我尝试使用 obj_exception_throw 但我确实得到了任何东西。

经过其他测试,我只有ios6上的问题。在 iOS7 上一切顺利。

【问题讨论】:

你是否在代码中添加了约束?有这个NSAutoresizingMaskLayoutConstraint 看起来你忘记将translatesAutoresizingMasksToContraints 设置为NO。 不,我没有在代码中添加任何约束,毫无疑问,我在 viewDidLoad 方法中添加了这一行,结果简直是一场噩梦!没有什么是在正确的位置了。 那我的回答是:你的约束不正确。 【参考方案1】:

您的某个标签的垂直约束过多,无法同时满足。

更改某些约束的优先级或重建它们。

【讨论】:

我更新了我的帖子来解释我的对象和约束是什么。看不到我可以删除什么...

以上是关于字符串翻译后 AutoLayout 约束冲突的主要内容,如果未能解决你的问题,请参考以下文章

AutoLayout 和 Embedded stackview 约束冲突

iOS AutoLayout的用法

iOS:在tableView中通过Masonry使用autolayout在iOS7系统出现约束崩溃

代码适配(Autolayout)

iOS 在xib或者storyboard中添加AutoLayout后,在代码中修改AutoLayout约束条件

实现一个在autolayout下有宽度约束后,自动确定高度的view