2013-01-02 2 views
0

인터페이스 빌더를 사용하여 iPad 용 화면을 디자인하려면 trng해야합니다. 나는 빈보기를하고 난 4 개 제약 벽지로있는 UIImageView를 추가 :이 방법으로iPad 용 거의 비어있는 UIView의 모호한 레이아웃

Leading Space to superview = 0 
Trailing Space to superview = 0; 
Top Space to superview = 0; 
Bottom Space to superview = 0; 

는 이미지가 가로 모드에서 완벽하게 크기를 조정합니다. , 가로 모드에서

*<UIWindow:0x754c210> 
| *<UIView:0x75555f0> - AMBIGUOUS LAYOUT 
| | *<UIImageView:0x7555650> - AMBIGUOUS LAYOUT 

: 나만 세로 모드에서 ambigous 레이아웃 출력을 얻을 화면에이 요소

NSLog(@"%@", [[UIWindow keyWindow] _autolayoutTrace]); 

: 및 didRotateFromInterfaceOrientation :

는 좀 디버그 viewDidAppear에 코드를 삽입 잘 작동하는 것 같습니다.

*<UIWindow:0x754c210> 
| *<UIView:0x75555f0> 
| | *<UIImageView:0x7555650> 

더 많은 컨트롤을 추가하고 화면이 잘 작동하는 것처럼 보이지만 모호한 레이아웃을 제거 할 수는 없습니다. 내가 뭘 잘못하고있어?

답변

0

당신이 뭔가 잘못을하고 있다면 나도 몰라,하지만 난 비주얼 서식 언어 사용 : 나는 그것을 추적에서 모든 ambigous 레이아웃 경고가 표시되지

[NSLayoutConstraint constraintsWithVisualFormat:@"V:|[contentsView]|" 
              options:0 
              metrics:nil 
               views:NSDictionaryOfVariableBindings(contentsView)]]; 

[NSLayoutConstraint constraintsWithVisualFormat:@"H:|[contentsView]|" 
              options:0 
              metrics:nil 
               views:NSDictionaryOfVariableBindings(contentsView)]]; 

합니다.

1

제약 조건이 "해결"되고 모호하지 않을 때가 있습니다. WWDC 2012 비디오 "자동 레이아웃 마스터 링을위한 모범 사례"에 따르면 모호성은 일시적으로 용인 될 수 있습니다 (불만족 스러움과는 달리 예외가 즉시 제기 됨). 당신이 당신의 제약이 애매 남아 있지 않은지 스스로에게 증명하려면

, 다음 [UIWindow keyWindow] _autolayoutTrace]에 대한 래퍼를 작성하고 잠시 후에 전화 :

- (void)viewDidAppear:animated 
{ 
    [super viewDidAppear:animated]; 

    [self performSelector:@selector(wrapperForLoggingConstraints) withObject:nil afterDelay:.3]; 
} 

- (void)wrapperForLoggingConstraints 
{ 
    [[UIWindow keyWindow] _autolayoutTrace]; 
} 

당신은 만들어야합니다 얻기 위하여 UIWindow에 대한 범주이 작동합니다 :

@interface UIWindow() 

+ (UIWindow *)keyWindow; 
- (NSString *)_autolayoutTrace; 

@end 

나는 자신의 헤더 파일에이 범주를 넣어

UIWindow_AutoLayoutDebug.h

을 지금까지 내가 전화 [[UIWindow keyWindow] _autolayoutTrace] 내 애플 리케이션에, 나는에 의해, UIWindow_AutoLayoutDebug.h이

내가 책 "튜토리얼에 의해 아이폰 OS 6"의 코드에서 [[UIWindow keyWindow] _autolayoutTrace] 호출에 대해 배웠 1 권을 가져 raywenderlich.com 팀. 전화를 지연시키는 아이디어는 내 자신입니다.

+0

lldb 세션 내에서만 _autolayoutTrace를 호출 할 수 있습니다. 위에 작성한대로 컴파일되지 않습니다. 당신은 UIView 메서드 'hasAmbiguousLayout'을 호출 할 수 있습니다. 그러나 이것은 하나의 뷰에 대해 알려주고 decedents는 알려주지 않습니다. 이를 위해, 모든 하위 뷰를 통해 재귀 호출하고 각각에 대해 hasAmbiguousLayout을 호출하는 메소드를 작성합니다. 개발시에만 코드를 전달하는 것이 아니라 기억하십시오. – idStar

관련 문제