문제

NSView가보기의 자동을 어떻게 이해하는지 이해해야합니다. 나는 모든 것을 IB로 설정했고 내 하위 뷰는 멋지게 크기를 조정합니다 (마우스로 창을 크기를 조정할 때). 그러나 내가한다면 [myMainView setFrame:] 내 새 프레임 직장으로 아무 일도 일어나지 않습니다. 내 하위 뷰는 모두 원래 크기입니다 (기본보기에는 올바른 차원이 있지만). 아이 resizeWithOldSuperviewSize: 호출되지만 여전히 적절한 크기는 아닙니다.

화면 (화면 #1), 레이블, 이미지, 비디오에 코코아 요소가 화면이 있습니다. 이 요소에 대해 잘 정의 된 레이아웃이 있습니다. 매우 잘 작동하는 인터페이스 빌더를 통해 자동화 동작을 설정합니다. 기본 창 크기를 조정하면 요소가 만족스러운 방식으로 크게 선별됩니다.

이제 사용자는 "다음"버튼을 클릭하여 두 번째 스크린의 요소 (화면 #2)를 그려야합니다. 내 레이아웃은 표준 스크린 크기 (예 : 800x600)를 기반으로 구축됩니다. 그러나 이제 창은 화면 #1에서 크기가 크기 때문에 더 크거나 작습니다. 따라서 요소는 이제 사용 가능한 공간을 채우기 위해 적절한 크기의 대신 창에 작은 영역 만 가져 가고 있습니다. 이 요소를 확장하고 싶습니다.

자동화 된 방법이 어떻게 작동하는지 오해하고 있습니까? NSVIEW 아래의 Autoresize 기계를 수동으로 트리거하려면 어떻게해야합니까?

내가 할 수있는 두 가지가 있습니다.

  1. 원래 크기에 대한 현재 화면 크기에 따라 요소를 수동으로 크기를 조정하십시오. 이 옵션은 내가 가장 좋아하는 것이 아닙니다. 겉보기에는 NSView에서 이미 작동중인 코드를 다시 작성해야합니다 (자동화 동작
  2. 두 번째 옵션은 위에서 언급 한 NSView의 자동화 된 마법을 호출하는 것입니다. 문서는 [nsview setframe :]가 나를 위해 그렇게 할 것임을 암시합니다. 내가 시도한 것은 컨텐츠보기를 원래 스크린 크기 (800x600)로 크기를 조정 한 다음 요소를 렌더링 한 다음 현재 창 크기로 크기를 조정하는 것입니다. 개념적으로 창을 수동으로 크기를 조정하는 것이 동일하지 않습니까? 그렇지 않은 것 같습니다. 다시 말하지만,이 옵션은 작성되고 유지 관리되는 코드의 양을 최소화하기 때문에 바람직합니다.
도움이 되었습니까?

해결책 2

내 접근 방식이 정확하다는 것이 밝혀졌습니다. 프레임 크기를 잘못된 값으로 설정하고 있었기 때문에 예상되는 동작을 얻지 못했습니다. 도.

다른 팁

이 코드

NSView* superView = [[NSView alloc] initWithFrame:NSMakeRect(0, 0, 100, 100)];
NSView* subView   = [[NSView alloc] initWithFrame:NSMakeRect(0, 0, 100, 100)];
[superView addSubview:subView];

[superView setAutoresizesSubviews:YES];
[subView setAutoresizingMask:NSViewWidthSizable | NSViewHeightSizable];

NSLog(@"subview's frame before resizing: %@", NSStringFromRect([subView frame]));
[superView setFrame:NSMakeRect(0, 0, 200, 100)];
NSLog(@"subview's frame after  resizing: %@", NSStringFromRect([subView frame]));

예상 결과를 제공합니다.

[...] subview's frame before resizing: {{0, 0}, {100, 100}}
[...] subview's frame after  resizing: {{0, 0}, {200, 100}}

당신의 문제는 다른 곳입니다. 컨테이너 뷰 중 하나가 크기즈가 발생할 때 창의 뷰 계층 구조의 일부가 아니라고 기대합니다.

문제에 대한 좋은 솔루션은 탭이없는 nstabview를 사용하는 것일 수 있습니다. 모든 뷰는 항상 창에 (숨겨져있을 수 있음) 항상 탭 뷰가 크기 조정을 처리하기 때문입니다.

또 다른 해결책은 서로 몇 가지 견해를 서로 위에 놓고 사용하는 것입니다 setHidden: 하나만 보여주기 위해.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top