2013-04-15 1 views
0

내 응용 프로그램에서는 window.contentView 크기가 700 * 500이고, x1의 뷰를 viewview1을 서브 뷰로 추가 한 후 크기가 480 * 300 인 xib에서 뷰를 초기화합니다. window.contentView, 자동으로 view1 크기를 700 * 500으로 조정해야합니다. autoresizingMask를 설정했지만 작동하지 않습니다.xib에서 자동 크기 조정 서브 뷰

- (void)applicationDidFinishLaunching:(NSNotification *)aNotification 
{ 
    self.rootViewController = [[TrendRootViewController alloc] initWithNibName:@"TrendRootViewController" bundle:[NSBundle mainBundle]]; 
    NSView *view1 = self.rootViewController.view; 
    [self.contentView addSubview:view1]; 
    NSLog(@"view1 frame %@",NSStringFromRect(view1.frame)); 
} 

뷰 1의 XIB enter image description here

내 애플 리케이션 : (빨간색 뷰가 뷰 1 인) enter image description here

은 뷰 1의 프레임이라고 이상해 "뷰 1 프레임 {{0, 0}, { 480, 300}} "이지만, 아래 그림과 같이 view1은 상단 왼쪽에 위치하지 않았습니다.

답변

0

IB의 크기 조정 상자 바로 위의 원점 상자에서 화살표 위치를 변경하여이 작업을 수행 할 수 있습니다. 원산지 상자의 왼쪽 상단을 클릭하면보기가 왼쪽 상단에 나타납니다.

0

는 뷰 1 프레임 "은 뷰 1의 프레임이라고 이상해"{{0, 0}, {480, (300)}} "하지만, 우는 소리 같이 뷰 1은 왼쪽 상단 위치에 있지 않았다. "

OS X은 iOS가 아니며 AppKit은 UIKit이 아닙니다.

UIKit 기반 뷰에 대한 iOS의 기본 좌표계는 UO (Lower-Origin-Origin)이며, AppKit 기반 뷰의 OS X에서는 기본값이 LLO (Lower-Left-Origin)입니다.

빨간색보기의 프레임이 {{0, 0}, {480, 300}}인데, 원점은 창 contentView의 왼쪽 하단 모서리 인 {0, 0}입니다.

iOS의 UIViewController과 달리 NSViewController은 자동으로 창 크기에 맞게보기의 크기를 조정하지 않습니다. 보기 프레임을 창의보기 프레임과 일치 시키려면 몇 가지 옵션이 있습니다.

하나의 옵션에 하위 뷰로 추가하기 전에보기 자신의 프레임을 설정하는 것입니다 윈도우의 contentView :

NSView *redView = self.rootViewController.view; // force view to load 
[redView setFrame:NSMakeRect(0.0, 0.0, NSWidth(self.window.frame), 
             NSHeight(self.window.frame))]; 
[self.window.contentView addSubview:redView]; 

또는 인터페이스 빌더에서, 같은 크기가있는 NSBox을 추가 할 수 있습니다 윈도우의 내용보기. IB에서는 상자의 제목 위치를 None, 상자 유형을 Custom, 테두리 유형을 None으로 설정하십시오. "스프링 및 스트럿"(자동 크기 조정 마스크)을 view1.xib의 뷰와 동일하게 설정하면 (창 크기를 조정할 때 상자 크기가 함께 조정됩니다). 그런 다음 상자에 대한 IBOutlet를 만들고, 대신 추가 뷰 컨트롤러의 view 윈도우의 contentView에 하위 뷰로서, NSBox 호출의 setContentView:setContentView:을하고 뷰 컨트롤러의 뷰 통과 NSBox에 설명 된대로

[self.box setContentView:self.rootViewController.view]; 

를 ' 메서드에서 전달한보기가 "... 상자의 현재 내용 영역 내에 맞게 조정되고 상자가 다시 표시되도록 표시됩니다." 즉, 상자가 자동으로 적절한 크기로보기 크기 조정을 처리합니다.