如何在 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;
注意:以编程方式创建的视图 translatesAutoresizingMaskIntoConstraints
的 UIView
属性必须设置为 NO
才能正常工作。
【讨论】:
以上是关于如何在 UIView 中有一个 UIImageView 并应用 NSLayoutConstraint?的主要内容,如果未能解决你的问题,请参考以下文章
使 UIImageview 根据另一个 UIImageview 旋转而旋转
tableView + subView 的高度突然变化[关闭]