인터페이스 빌더에서 컨트롤러를 연결하면 위치가 잘 나온다.
 


 
그런데 프로그램 코드상에서 연결하면 아래와 같이 나온다.
 

딱 Status Bar 크기 CGRect로 20포인트 만큼 위로 올라갔다.
코드에서 해당 View 를

myRootViewController 
    = [[MyRootViewController alloc] initWithNibName:@"MyRootViewController" 
                                             bundle:nil];
[self.window addSubview:myRootViewController.view];
[myRootViewController.view setFrame:CGRectMake(0, 20, 320, 460)];


20 포인트만큼 내려주자.  

ps. XCode 3.2와 XCode 4.XX 버전에서 View-base Application을 만들면 내부 구조가 다릅니다. 이부분을 정확하게 확인해 봐야 겠습니다.
     지금 문제는 단순하게 밀린 화면을 위로 올린것 뿐 입니다. 

#해결 (2011-08-08)
20 포인트로 고정하면 기기에 따른 status바가 다를수 있습니다. 일예로 아이패드와 호환성 문제가 발생할수 있습니다.
이때 UIScreen 으로 장치의 해상도와 실제뷰 화면의 해상도를 가져오면 유리 합니다.
    CGRect rect = [[UIScreen mainScreen] applicationFrame];
    [myRootViewController.view setFrame:rect];

 실제 디버깅 값입니다.
참고 : http://maccrazy.tistory.com/74 


추가 : 2012.03.04
iOS 5.0 이상부터는 아래와 같이 코딩하면 됩니다.
 
    self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];

    self.viewController = [[HelloWorldViewController alloc] initWithNibName:@"HelloWorldViewController" 
                                                                     bundle:nil];

    self.window.rootViewController = self.viewController;

    
    // Override point for customization after application launch.
    self.window.backgroundColor = [UIColor whiteColor];
    [self.window makeKeyAndVisible];
    return YES;
posted by 뚱2