2013-10-22 3 views
1

iOS 7의 경우 상태 표시 줄에 문제가있었습니다. 이를 위해 Appdelegate에서 아래 코드를 사용하여 해결했습니다.self.window가보기 컨트롤러 내부에서 작동하지 않습니다.

if ([[[UIDevice currentDevice] systemVersion] floatValue] >= 7) { 
    [[UIApplication sharedApplication] setStatusBarStyle: UIStatusBarStyleLightContent]; 
    self.window.clipsToBounds =YES; 
    self.window.frame = CGRectMake(0,20,self.window.frame.size.width,self.window.frame.size.height-20); 
    self.window.bounds = CGRectMake(0,0, self.window.frame.size.width, self.window.frame.size.height); 
} 

모두 완벽하게 작동합니다.

사진 찍는 동안 문제가됩니다.

카메라 또는 포토 갤러리를 열 때 상태 표시 줄이 계속 표시되며 그 때문에 아래 그림과 같이 탐색 제목의 절반이 표시됩니다.

enter image description here

어떤 생각

는 어떻게이 오류를 극복 할 수 있는가?

문제점은 다음과 같습니다 : I 취소를 클릭하면

  1. 포토 갤러리/카메라 내보기가 자동으로 20 픽셀을 이동, 위의 이미지

  2. 처럼 온다. 대신

+0

@sathiamoorthy : code pls ... 내가 의미하는 것을 얻지 못했습니다 ... –

답변

0

내 프로젝트 중 하나에이 문제가 발생했습니다. 우리는 많은 수업을위한 xib조차 갖고 있지 않았습니다. 그래서 내가 할 수있는 일은 델리게이트 함수에서 프레임을 다시 한번 리셋하는 것입니다.

[self.navigationController dismissViewControllerAnimated:YES 
               completion:^{ 
                [self.navigationController.view setFrame:CGRectMake(self.navigationController.view.frame.origin.x, [UIApplication sharedApplication].statusBarFrame.size.height, self.navigationController.view.frame.size.width, [[UIScreen mainScreen] bounds].size.height-[UIApplication sharedApplication].statusBarFrame.size.height)]; 
               }]; 

나는 사진/카메라 피켓, 메일 피커의 대리자 메서드를 취소/마무리에 넣고.

+0

정확히 ... 이것을 확인하고 다시 돌아올 것입니다 ... –

+0

네비게이션 컨트롤러에 rootviewcontroller가 무엇인지 알려줄 때 리셋해야하는 이유는 무엇입니까? 프레임은 그 자체로 설정 될 수 있습니다. 나는 리셋없이 같은 일을 해냈다. –

+1

감사합니다 ... 감사합니다 ...감사합니다 ... 감사합니다 ... 감사합니다 ... 감사합니다 ... 감사합니다 ... 감사합니다 ... 감사합니다 ... 감사합니다 ... 왜 당신은 어제 나를 만났습니다;) 나는 4 시간을 낭비했습니다. 그것에 ... 감사합니다 남자 ... –

5

:

self.window 

사용이 :

[[self view] window] 

이 같이보십시오 :

if ([[[UIDevice currentDevice] systemVersion] floatValue] >= 7) { 
    [[UIApplication sharedApplication] setStatusBarStyle: UIStatusBarStyleLightContent]; 
    self.view.window.clipsToBounds =YES; 
    self.view.window.frame = CGRectMake(0,20,self.view.window.frame.size.width,self.view.window.frame.size.height-20); 
    self.view.window.bounds = CGRectMake(0,0, self.view.window.frame.size.width, self.view.window.frame.size.height); 
} 
+0

여전히 동일한 문제 ... –

+0

구현 중입니다. 잠시만 기다려주십시오 ... –

+0

오케이 ... 기다려 드리겠습니다. 귀하의 회신을 위해 ... –

1

나는 당신이 UINavigationController가를 사용하는 것 같아요. UINavigationController를 사용하는 경우 프레임과 아무 관계가 없으며 상태 표시 줄을 사용하여 작업을 수행 할 수도 없습니다. 상태 표시 줄 설정과 함께 UINavigationController를 설정하려면 아래 코드를 선호하십시오. 그렇지 않으면 코드를 표시 할 수 있습니다.이 문제를 해결하는 데 도움이됩니다.

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 
{ 
    [[UIApplication sharedApplication] setStatusBarHidden:NO]; 
    [[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleBlackOpaque]; 
    self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]]; 
    // Override point for customization after application launch. 
    self.viewController = [[ExViewController alloc] initWithNibName:@"ExViewController" bundle:nil]; 
    self.window.rootViewController = self.viewController; 

    self.mainViewNavigation = [[UINavigationController alloc] initWithRootViewController:self.viewController]; 
    self.window.rootViewController = mainViewNavigation; 


    [self.window addSubview:self.mainViewNavigation.view]; 
    [self.window makeKeyAndVisible]; 
    return YES; 
} 
+0

델리게이트에서하고 싶지 않습니다. –

+0

답변은 navigationController의 rootviewcontroller를 설정하는 것입니다. 언제 어디서나 사용할 수 있습니다 –

관련 문제