2014-11-22 5 views
0

방금 ​​NSStackView으로 실험하기 시작했습니다. 해결할 수없는 매우 흥미로운 문제가 있습니다. 나는 NSStackView 문서뿐만 아니라 애플의 웹 사이트에서 자동 레이아웃 가이드를 샅샅이 뒤졌고 아무 것도 발견하지 못했다.NSStackView가 뷰를 올바르게 레이아웃하지 않았습니다.

내 문제는 nib 파일에서로드 된 두 개의 동일한 NSScrollView 개체 (각각 NSTextView 포함)가 있다는 것입니다. 이러한 뷰를 스택보기에 추가하면 처음에 추가 된 뷰가 사용 가능한 공간의 100 %를 차지하고 두 번째 뷰는 사용 가능한 모든 수평 공간을 차지하면서 2 픽셀의 높이로 완전히 아래로 접습니다. 결과적으로 첫 번째보기가 창에있는 유일한보기처럼 보입니다. 여기처럼 현재 모습 : 그것은 때문에 배경 색상의 예에서 볼 수 거의 불가능

A screenshot of the problematic window

하지만, 스크롤 뷰 창 하단 위에 몇 픽셀을 종료합니다.

The Xcode view hierarchy inspector

여기에 관련 설정 코드입니다 : 여기에 내가 선택한이 2 픽셀 높은보기가 뷰 계층 관리자에서 더 잘 볼 (click here to view larger)의 내가 이해에서

// Load the stack view 
self.inputViewController = [[NSViewController alloc] initWithNibName:@"Document_TextInputView" bundle:nil]; 
self.textView = (NSTextView *)[[(NSScrollView *)self.inputViewController.view contentView] documentView]; 

self.outputViewController = [[NSViewController alloc] initWithNibName:@"Document_TextOutputView" bundle:nil]; 
self.outputView = (NSTextView *)[[(NSScrollView *)self.outputViewController.view contentView] documentView]; 

// Add all views into the stack view 
[self.stackView addView:self.inputViewController.view inGravity:NSStackViewGravityTop]; 
[self.stackView addView:self.outputViewController.view inGravity:NSStackViewGravityBottom]; 
self.stackView.orientation = NSUserInterfaceLayoutOrientationVertical; 

// Load the text into the window. 
[self.textView setString:self.cachedText]; 
[self.outputView setString:@"=== PROGRAM OUTPUT ===\n"]; 
[self.codeActionSegmentedControl setEnabled:NO forSegment:1]; 

는, 본질적인 콘텐츠 크기 으로 축소가 줄어들지 않아야합니다. 나는 NSStackView에 너무 익숙하지 않아 어떤 도움을 주시면 감사하겠습니다.

+0

두 서브 뷰 모두에 대해 'NSStackViewGravityTop'을 사용하려고 했습니까? – Astoria

+0

@Astoria 예, 그리고 그것은 내가 게시 한 것과 다른 시각적으로 다른 것을하지 않습니다. – SevenBits

답변

3

좋아요, 내 자신의 문제에 대한 해결책을 찾았습니다.이 문제를 검색하고 질문을 찾은 모든 사람들이 대답을 할 수 있도록 모든 문제를 게시하고 있습니다.

NSScrollView에는 본질적인 콘텐츠 크기가 없으므로 어떤 높이인지 알고있는 NSStackView을 허용하지 않으므로 두 번째 NSScrollView이 축소되었습니다. Xcode에서 기본적으로 생성 된 제한은 NSScrollView의 다른 요소와의 관계를 제공하지만이 정보는 스택 뷰에 그 높이를 알려주지 않습니다.

해결 방법은 NSScrollView (프로그래밍 방식 또는 인터페이스 작성기)에 높이 제한을 추가하여 NSStackView이보기를 올바르게 배치 할 수 있도록하는 것입니다. 그렇다면 모든 것이 마술처럼 작동합니다.