NSLayoutConstraint 不适用于 uibutton 和 uilabel

Posted

技术标签:

【中文标题】NSLayoutConstraint 不适用于 uibutton 和 uilabel【英文标题】:NSLayoutConstraint not working on uibutton and uilabel 【发布时间】:2015-12-16 06:00:57 【问题描述】:

我创建了一个 uilable 和 uibutton

@IBOutlet weak var label_one: UILabel!
@IBOutlet weak var btn_one: UIButton!

并设置以下尾随和前导约束

        self.btn_one.translatesAutoresizingMaskIntoConstraints=false
    let contariants=NSLayoutConstraint(item:self.view,attribute:NSLayoutAttribute.LeadingMargin , relatedBy: NSLayoutRelation.Equal, toItem: btn_one, attribute: NSLayoutAttribute.LeadingMargin, multiplier: 1.0, constant: 20)
    let trailingConstraints=NSLayoutConstraint(item: self.view, attribute:NSLayoutAttribute.Trailing, relatedBy: NSLayoutRelation.Equal, toItem: btn_one, attribute:NSLayoutAttribute.Trailing , multiplier: 1.0, constant:20 )

    self.view.addConstraint(contariants)
    self.view.addConstraint(trailingConstraints)

// 但它根本不起作用并给出以下警告 以下列表中的至少一个约束可能是您不想要的。 试试这个: (1)查看每个约束并尝试找出您不期望的; (2) 找到添加了一个或多个不需要的约束的代码并修复它。 ( "", “UIButton:0x7ff8c84b0b60'Button'(名称:'|':UIView:0x7ff8c85226d0)>” )

将尝试通过打破约束来恢复

在 UIViewAlertForUnsatisfiableConstraints 创建一个符号断点,以便在调试器中捕获它。 中列出的 UIView 上的 UIConstraintBasedLayoutDebugging 类别中的方法也可能会有所帮助。 2015-12-16 10:39:01.918 ConstraintsExample [2635:38168] 无法同时满足约束条件。 以下列表中的至少一个约束可能是您不想要的。 试试这个: (1)查看每个约束并尝试找出您不期望的; (2) 找到添加了一个或多个不需要的约束的代码并修复它。 ( "", "UIButton:0x7ff8c84b0b60'Button' (名称: '|':UIView:0x7ff8c85226d0 )>", "", “” )

将尝试通过打破约束来恢复

在 UIViewAlertForUnsatisfiableConstraints 创建一个符号断点,以便在调试器中捕获它。 中列出的 UIView 上的 UIConstraintBasedLayoutDebugging 类别中的方法也可能会有所帮助。

【问题讨论】:

【参考方案1】:

这个错误是因为你试图让视图同时做多个约束。从 IB 将元素拖放到视图上的那一刻,它对给定位置产生了基本约束。 当您尝试以下“addConstraint”方法时,编译器无法理解要遵循哪个约束。

如果您以编程方式制作按钮和标签,上述内容将起作用。 PFB 一个帖子讨论这个:

Programmatically Add CenterX/CenterY Constraints

如果您想修改情节提要上的现有约束: 在元素上添加约束:

不要将该约束用作与您的代码的连接:

【讨论】:

它现在可以正常工作了,谢谢,我可以更改已经从 xcode 设置的约束吗?????? 看看这篇文章:***.com/questions/29991246/… 他们说的是简单地控制+拖动一个 NSLayout 约束从情节提要到你的视图控制器,然后在你的代码中修改它,如下所示:constraint.constant = 50 我从情节提要中拖放按钮并应用代码中的约束没有任何约束起作用..当我从代码创建按钮并应用相同的约束时,它将应用所有这些并且工作正常,我不能明白这一点,你能帮我..我会很感激 @khaskheli 我已经更新了我的答案。请看一看。【参考方案2】:

您按照错误消息中的说明进行操作。您查看它显示的约束,认真思考,并找出您有矛盾约束的地方。

您可能在 .xib 文件或情节提要中有一些限制。

顺便说一句。 “contariants”太可怕了。第一个约束看起来不对(view.leading = button.leading + 20,这意味着按钮从屏幕左侧 20 像素处开始????)。 NSLayoutAttribute.LeadingMargin 应该只是 .LeadingMargin。

【讨论】:

感谢@gnasher729。一个问题我从 xcode 对视图设置了约束,并希望从代码中更改是否可能????

以上是关于NSLayoutConstraint 不适用于 uibutton 和 uilabel的主要内容,如果未能解决你的问题,请参考以下文章

DigitalPersona U.are.U 4500 指纹读取器 SDK 不适用于 Windows 10

Drupal 寻呼机不适用于查询中的“LIKE”

@IBDesignable , NSLayoutConstraint 用于超级视图的比例乘数宽度?

NSLayoutConstraint 用于 UITableView 上的视图

NSLayoutConstraint 用于代码中未知数量的子视图

绝对路径不适用于 WCF 服务