2013-06-11 101 views
1

我在控制檯的AutoLayout設置中遇到了一些衝突錯誤。AutoLayout衝突錯誤

我知道他們的意思。

如何查找錯誤引用的視圖?

我知道我看到一個WWDC視頻,其中的人在視圖上設置了一些標識符,以便AutoLayout錯誤更具可讀性。

目前,我有...

( 
    "<NSAutoresizingMaskLayoutConstraint:0x20964090 h=--& v=--& H:[UIView:0x1fdddbf0(480)]>", 
    "<NSLayoutConstraint:0x1fde8000 H:[UIView:0x1fdb35a0(320)]>", 
    "<NSLayoutConstraint:0x1fdb3dc0 H:|-(0)-[UIView:0x1fdb35a0] (Names: '|':UIView:0x1fdb7040)>", 
    "<NSLayoutConstraint:0x1fdb3d80 UIView:0x1fdb35a0.trailing == UIView:0x1fdb7040.trailing>", 
    "<NSAutoresizingMaskLayoutConstraint:0x1fd66e30 h=-&& v=-&& UIView:0x1fdb7040.width == UIView:0x1fdddbf0.width>" 
) 

我知道這可能是導致AutoresizingMask我只是不知道哪AutoresizingMask錯誤。

+0

所以,你想知道哪個約束是導致錯誤,或者你如何能夠確定哪個約束更容易? –

+0

我希望能夠將日誌顯示爲「PlayPauseView」而不是「UIView」或實際的視圖。有一個WWDC視頻,這個人做這個,但我找不到他用來啓用它的控件。他設定了每個元素的「標識符」。即「UILabel」成爲AutoLayout錯誤日誌中的「標題標籤」。 – Fogmeister

回答

0

通常我只有在代碼中添加約束條件並給它們指定名稱時才顯示標籤。如果通過故事板加入他們,你可以嘗試加入了XCode標識符你的看法,但我已經打了這個問題,我通常添加一些的NSLog語句來打印出我感興趣的觀點,如

NSLog(@"My View: %@", self.myView); 

那會告訴我該視圖的ID,希望像

My View: UIView:0x1fdddbf0 
你的情況

這就是說,我不確定即使知道什麼意見將在這裏幫助你很多。標準建議是將Autoresizing遮罩關閉以用於使用自動佈局的視圖。我沒有太多的經驗協調這些,但它看起來像問題是一個視圖設置爲320pt寬,並且自動調整掩碼已添加約束將它設置爲480pt寬。

0

我知道這是舊的,但對於任何發現此問題的人:您可以使用this post中的說明在Interface Builder中執行此操作。基本上重寫生成那些「的UIView:0xwhatever」內部方法,此代碼串:

@implementation UIView (AutoLayoutDebugging) 
- (void)setLayoutDebuggingIdentifier:(NSString *)readableName { 
#ifdef DEBUG 
    objc_setAssociatedObject(self, @"layoutDebuggingIdentifier", 
          readableName, OBJC_ASSOCIATION_COPY_NONATOMIC); 
#endif 
} 
#ifdef DEBUG 
- (NSString *)_layoutDebuggingIdentifier { 
    return objc_getAssociatedObject(self, @"layoutDebuggingIdentifier"); 
} 
#endif 
@end 

然後就可以選擇在IB任何視圖,並設置用戶定義的運行屬性「layoutDebuggingIdentifier」爲任何你想要串在AutoLayout錯誤中看到。