如何在 UIView 中有一个 UIImageView 并应用 NSLayoutConstraint?

Posted

技术标签:

【中文标题】如何在 UIView 中有一个 UIImageView 并应用 NSLayoutConstraint?【英文标题】:How to have a UIImageView inside a UIView and apply NSLayoutConstraint? 【发布时间】:2015-01-05 21:36:41 【问题描述】:

我需要在 UIView 上应用 NSLayoutConstraints,其中包含 UIImageView。我尝试以编程方式执行此操作,但出现无法同时满足约束的错误。

UIView *containerView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 100, 100)];
containerView.backgroundColor = [UIColor greenColor];

UIImageView *imageView = [[UIImageView alloc]initWithFrame:CGRectMake(0,0,50,50)];
imageView.backgroundColor = [UIColor redColor];

[self.view addSubview:containerView];
[containerView addSubview:imageView];

NSDictionary *views = [NSDictionary dictionaryWithObjectsAndKeys:
                       containerView,@"contrainerview",
                       imageView, @"myimageview",
                       nil];

containerView.translatesAutoresizingMaskIntoConstraints = NO;

[self.view addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:[NSString stringWithFormat:@"V:|-(100)-[contrainerview(300)]->=0-|"] options:0  metrics:nil  views:views]];
[self.view addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:[NSString stringWithFormat:@"H:|[contrainerview(300)]->=0-|"] options:0  metrics:nil  views:views]];
[containerView addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:[NSString stringWithFormat:@"V:|-(100)-[myimageview]->=0-|"] options:0  metrics:nil  views:views]];

2015-01-09 14:36:52.476 测试[543:6554] 无法同时满足约束。 以下列表中的至少一个约束可能是您不想要的。

试试这个:

(1) 查看每个约束并尝试找出您不期望的;

(2) 找到添加了一个或多个不需要的约束的代码并修复它。 (注意:如果您看到不理解的 NSAutoresizingMaskLayoutConstraints,请参阅 UIView 属性 translatesAutoresizingMaskIntoConstraints 的文档) ( "", “” )

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

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

【问题讨论】:

请在问题中包含错误 我添加了错误。此行导致错误:[containerView addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:[NSString stringWithFormat:@"V:|-(100)-[myimageview]->=0-|"] options:0 metrics:nil views:views]] ; 【参考方案1】:

你可以试试这个: 从 xib 文件中删除所有 translatesAutoresizingMaskIntoConstraints 属性(将 xib 作为源代码打开)。

【讨论】:

我不使用 xib 文件。一切都是在我的 ViewDidLoad 中以编程方式创建的。【参考方案2】:

既然你是动态创建的,你还需要使imageView.translatesAutoresizingMaskIntoConstraints = NO;

注意:以编程方式创建的视图 translatesAutoresizingMaskIntoConstraintsUIView 属性必须设置为 NO 才能正常工作。

【讨论】:

以上是关于如何在 UIView 中有一个 UIImageView 并应用 NSLayoutConstraint?的主要内容,如果未能解决你的问题,请参考以下文章

使 UIImageview 根据另一个 UIImageview 旋转而旋转

从概念上讲如何在ios中的图像上写[关闭]

tableView + subView 的高度突然变化[关闭]

带有 webview 的 UIView 滚动

2 个 TextField,在 1 个 UIView 中有 2 个选择器

使用许多图像缩放 UIScrollView 的正确方法?