这是一个链接到视图控制器的非常基本的视图。该视图具有单个UILabel,其具有编码约束。代码实际上运行正常,但控制台正在注册约束冲突,我无法弄清楚代码的哪一部分正在产生冲突。
LocationView.m文件
#import "LocationView.h"
@implementation LocationView
@synthesize locationTitle;
- (id)initWithFrame:(CGRect)frame
{
self = [super initWithFrame:frame];
if (self) {
// Initialization code
[self setBackgroundColor: [UIColor blueColor]];
locationTitle = [[UILabel alloc]init];
[locationTitle setTranslatesAutoresizingMaskIntoConstraints:NO];
locationTitle.backgroundColor = [UIColor whiteColor];
[self addSubview:locationTitle];
NSDictionary *viewLocationTitle = NSDictionaryOfVariableBindings(locationTitle);
[self addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"H:|[locationTitle]|"
options:0
metrics:0
views:viewLocationTitle]];
[self addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:|-[locationTitle(50)]|"
options:0
metrics:0
views:viewLocationTitle]];
- (void)updateConstraints {
[super updateConstraints];
}
@end
控制台错误
Unable to simultaneously satisfy constraints.
(
"<NSLayoutConstraint:0x109510990 V:|-(NSSpace(20))-[UILabel:0x10950b660] (Names: '|':LocationView:0x10950acc0 )>",
"<NSLayoutConstraint:0x109510c10 V:[UILabel:0x10950b660(50)]>",
"<NSLayoutConstraint:0x109510c60 V:[UILabel:0x10950b660]-(0)-| (Names: '|':LocationView:0x10950acc0 )>",
"<NSAutoresizingMaskLayoutConstraint:0x108f3ae00 h=--& v=--& V:[LocationView:0x10950acc0(568)]>"
)
答案 0 :(得分:1)
问题是这个字符串,“V:| - [locationTitle(50)] |”。 Tis表示,locationTitle是距离视图顶部的标准距离(我认为20点),距离底部0点,但它只有50点高 - 只有在超级视图高70点时才能满足。您可能想要删除顶部或底部约束(如果要将其拉伸到20点顶部空间的整个视图上,则可以移除高度。)
答案 1 :(得分:1)
我想你是说你希望它高50分并固定在超级视图的顶部和底部(你在标签之前和之后都包括了)。
尝试将垂直约束更改为
@"V:|-[locationTitle(50)]"
或者您可以为其中一个约束添加较低的优先级,但我猜这就是您的意思。