2013-12-23 40 views
0

這是鏈接到視圖控制器的非常基本的視圖。該視圖具有一個單獨的UILabel,它與編碼約束一起放置。代碼實際上運行正常,但控制檯正在註冊一個約束衝突,並且我找不出哪部分代碼正在創建衝突。iOS以編程方式生成的視圖具有隱藏約束,導致與自動佈局的衝突

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)]>" 
) 

回答

1

我認爲你的意思是說你希望它達到50分的高度,並固定在超級視圖的頂部和底部(包括你的標籤之前和之後)。

試着改變你的垂直約束

@"V:|-[locationTitle(50)]" 

或者你也可以到約束的一個增加一個較低的優先級,但我猜這是你的意思。

1

問題是這樣的字符串, 「V:| - [locationTitle(50)] |」。蒂斯說,locationTitle是距離視圖頂部的標準距離(我認爲是20分),從底部開始0分,但它只有50分高 - 只有當超級視角高70分時才能滿足。您可能想要移除頂部或底部的約束(或者如果您想在整個視圖頂端拉伸20點的頂部空間)。

相關問題