0

下面是一些代碼:NSLayoutConstraint constraintWithVisualFormat不能引用的SuperView

UIView *c = [[UIView alloc] initWithFrame:CGRectZero]; 
[self addSubview:c]; 
c.translatesAutoresizingMaskIntoConstraints = NO; 
c. backgroundColor = [UIColor lightGrayColor]; 
[self addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"H:|-[c(>=600)]-|" options:NSLayoutFormatDirectionLeadingToTrailing metrics:nil views:NSDictionaryOfVariableBindings(c)]] ; 
[self addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:|[c]|" options:NSLayoutFormatDirectionLeadingToTrailing metrics:nil views:NSDictionaryOfVariableBindings(c)]] ;![enter image description here][1] 

它爲什麼會落得這樣看?是我的超級視圖搞砸了嗎?

Image of messed constraint]

這是我的看法包含如何設置: IB setup of containing view

+0

我們看着這張圖片什麼?我看到一個藍色的輪廓,一個綠色的矩形和一個灰色的圓角矩形。上面的代碼是哪個視圖(即什麼是自己)? – rdelmar 2013-05-05 03:19:16

+0

我複製了你現在使用的代碼,並且我得到了一個灰色的視圖,它是全高,從左邊和右邊有20個點(> = 600雖然沒有做任何事情 - 沒有它也是一樣)。那是你要的嗎? – rdelmar 2013-05-05 03:30:47

+0

是的,完全就是我想要的。淺灰色框是我添加約束的視圖。藍色輪廓框是自我觀點的超級觀點。什麼會影響自我,阻止那些約束代碼的運作? – 2013-05-05 15:51:47

回答

0

c的上海華是self。不是self.superview

因此,這些行應該閱讀:

[self addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"H:|-[c]-|" options:0 metrics:nil views:NSDictionaryOfVariableBindings(c)]] ; 
[self addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:|-0-[c]-0-|" options:0 metrics:nil views:NSDictionaryOfVariableBindings(c)]] ; 

也爲UIView的指定初始化器是-initWithFrame:只是打電話init不能保證正常工作。所以第一行應該是

UIView *c = [[UIView alloc] initWithFrame:CGRectZero]; 
+0

另外,「V:| -0- [c] -0- |」中的0是不必要的,應該寫成「V:| [c] |」 – rdelmar 2013-05-05 03:11:41

+0

對不起,調用self.superview實際上是調試代碼。我正在使用原始代碼更新我的帖子。我也轉向CGRectZero。仍然不能正常工作 – 2013-05-05 03:13:58

+0

很酷。我不知道。已更改,但仍無法使用。 – 2013-05-05 03:19:43

0

好的。現在看起來像是約束失敗,因爲包含所有東西的視圖都是UIScrollView的子類。