2011년 8월 24일 수요일

[iOS] View의 위치가 어긋나는 경우

XCode를 Window Based 프로젝트로 시작하여 직접 ViewController를 하나 만들어서 루트윈도우에 붙였을 때 뷰의 위치가 어긋나는 경우가 있다. 정확히는 스테이터스바(StatusBar, 화면 최상단의 시계 및 배터리 정보 등이 표시되는 막대) 크기 만큼 뷰가 위로 올라와서 붙은 경우이다. 이 경유 뷰의 최상단이 스테이터스바에 일부분 가려지게 되어서 문제가 된다.

View Based 프로젝트의 경우에는 이런 문제가 안생기는데 이유는 잘 모르겠다.

이 문제를 수동으로 해결하려면 화면이 보이는 프레임을 구해서 직접 뷰의 크기를 지정해 버리는 방법이 있다.
CGRect r = [[UIScreen mainScreen] applicationFrame];
이 코드 한줄로 정확한 프레임 위치 및 크기를 알 수 있다.

실제 Application Delegation 코드에서는 이런 식으로 쓸 수 있겠다. 이 코드에서 SomeUIViewController가 붙이려는 뷰컨트롤러이다.
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    // Override point for customization after application launch.
    CGRect r = [[UIScreen mainScreen] applicationFrame];
    SomeUIViewController *vc = [[SomeUIViewController alloc] initWithNibName:@"SomeUIViewController" bundle:nil];
    [vc.view setFrame:r];
    [self.window addSubview:vc.view];
    [self.window makeKeyAndVisible];
    return YES;
}
가끔 네비게이션바의 경우도 이런 현상이 생기던데 비슷하게 해결할 수 있을까?

댓글 없음 :