尝试添加简单约束但收到此错误消息

Posted

技术标签:

【中文标题】尝试添加简单约束但收到此错误消息【英文标题】:Trying to add simple constraint but got this error message 【发布时间】:2013-09-18 22:56:22 【问题描述】:

我正在尝试简单的实验,只是为了尝试如何将约束添加到对象中。因此,我从情节提要中只创建了一个具有垂直空间约束 = 200 的 UIView(黄色),如下所示:

这是我的接口文件:

#import <UIKit/UIKit.h>

@interface ViewController : UIViewController
@property (strong, nonatomic) IBOutlet UIView *screenView;
@property (strong, nonatomic) IBOutlet UIView *container;

@end

我想通过在我的viewDidLoad 上添加此代码以编程方式修改_container 的垂直空间约束:

NSLayoutConstraint *myConstraint =[NSLayoutConstraint
                                   constraintWithItem:_screenView
                                   attribute:NSLayoutAttributeWidth
                                   relatedBy:NSLayoutRelationEqual
                                   toItem:_container
                                   attribute:NSLayoutAttributeWidth
                                   multiplier:5
                                   constant:15];
[_container addConstraint: myConstraint];

但是当我在模拟器中运行它时,我收到了这个错误消息:

> 2013-09-19 05:48:26.488 container[6036:c07] *** Terminating app due to
> uncaught exception 'NSGenericException', reason: 'Unable to install
> constraint on view.  Does the constraint reference something from
> outside the subtree of the view?  That's illegal.
> constraint:<NSLayoutConstraint:0x7168860 UIView:0x7168b50.width ==
> 5*UIView:0x7169360.width + 15> view:<UIView: 0x7169360; frame = (0 0;
> 0 0); autoresize = TM+BM; layer = <CALayer: 0x7168bb0>>'

我做错了什么?谢谢...

更新:这就是我对 _container 的意思

这里是 _screenView

【问题讨论】:

什么是_container和_screenView? @rdelmar:嗨,感谢您的评论...请查看我的更新以了解 _container 和 _screenView 是什么。 【参考方案1】:

你的问题是 _screenView 是 _containerView 的父视图,所以你的约束应该添加到它,而不是 _containerView。此外,您说,“我想通过在我的 viewDidLoad 上添加此代码以编程方式修改 _container 的垂直空间约束”,但您正在做的是添加一个完全不同的约束(宽度约束)而不是修改您拥有的约束。如果你想修改垂直间距约束,你可以给它做一个IBOutlet,并在代码中修改它的常量值。

【讨论】:

你说得对 NSLayoutAttributeWidth。我应该使用:NSLayoutAttributeHeight。但是,我已经更改了 constraintWithItem:_container、toItem:_screenView 和 [_screenView addConstraint: myConstraint];我的调试器控制台上仍然出现错误 这里是错误消息:2013-09-19 06:31:01.915 container[389:c07] 无法同时满足约束。以下列表中的至少一个约束可能是您不想要的。试试这个:(1)查看每个约束并尝试找出您不期望的; (2) 找到添加了一个或多个不需要的约束的代码并修复它。 (注意:如果您看到不理解的 NSAutoresizingMaskLayoutConstraints,请参阅 UIView 属性 translatesAutoresizingMaskIntoConstraints 的文档) @RobertHanson,那是因为您添加了与您现在拥有的约束相冲突的宽度约束。看起来您从 _containerView 到 _screenView 两侧的长度间距约束为 0。如果要添加宽度约束,则需要删除其中一个水平间距约束。您可以通过为其创建一个 IBOutlet 并使用 removeConstraint: 将其删除来做到这一点。

以上是关于尝试添加简单约束但收到此错误消息的主要内容,如果未能解决你的问题,请参考以下文章

在 My SQL 中不断收到外键约束失败消息

我正在尝试将值添加到数据库中,但每次我尝试添加一些东西时,我都会收到错误消息“连接必须有效且打开。”

如何修复此错误 3734:无法在 MySQL WorkBench 上添加外键约束?

我正在尝试安装 NVIDIA 版本的工具包,但收到类似“...此声明可能没有外部“C”链接”之类的错误消息

“视图层次结构没有为约束做好准备”错误 Swift 3

添加 Xamarin 插件时出错