[ios7] UIImagePickerController가 상태 표시 줄 모양을 끊습니다.

.plist 파일에서 ” View controller-based status bar appearance ” 가로 설정되어 NO있습니다. 그러나 후에 UIImagePickerController는 옵션이로 설정된 것처럼 앱이 작동합니다 YES.

내 응용 프로그램에서을 나타내는 VC를 제시합니다 UIImagePickerController.

문제는 다음과 같이 발생합니다.

  • 사진 선택기가 표시된 후 사진 라이브러리를 선택하면 상태 표시 줄 텍스트의 색상이 변경됩니다.
  • 그런 다음 일단 UIImagePickerController닫히면 나머지 앱의 상태 표시 줄 간격이 변경되고 다른 컨트롤러의 모든 탐색 표시 줄이 상태 표시 줄 아래에 표시됩니다.

뷰 컨트롤러에서 상태 표시 줄을 관리하지 않고이를 해결할 수있는 방법이 있습니까?



답변

위의 솔루션 중 어느 것도 나를 위해 효과가 없었지만 Rich86man과 iOS_DEV_09의 답변을 결합하여 일관되게 작동하는 솔루션을 얻었습니다.

UIImagePickerController* imagePicker = [[UIImagePickerController alloc] init];
imagePicker.delegate = self;

- (void)navigationController:(UINavigationController *)navigationController willShowViewController:(UIViewController *)viewController animated:(BOOL)animated
{
    [[UIApplication sharedApplication] setStatusBarHidden:YES];
}

이 멋진 솔루션과 관련하여. 2014 / iOS8의 경우 경우에 따라 포함 prefersStatusBarHidden하고 아마도 childViewControllerForStatusBarHidden

-(void)navigationController:(UINavigationController *)navigationController
        willShowViewController:(UIViewController *)viewController
        animated:(BOOL)animated
    {
    [[UIApplication sharedApplication] setStatusBarHidden:YES];
    }

-(BOOL)prefersStatusBarHidden   // iOS8 definitely needs this one. checked.
    {
    return YES;
    }

-(UIViewController *)childViewControllerForStatusBarHidden
    {
    return nil;
    }

-(void)showCamera
    {
    self.cameraController = [[UIImagePickerController alloc] init];
    self.cameraController.delegate = (id)self; // dpjanes solution!
    etc...

누군가에게 도움이되기를 바랍니다.


답변

나는 오늘이 같은 문제에 직면했다. 여기 내 해결책이 있습니다.

이미지 선택기를 호출하는 뷰 컨트롤러에서 자신을 이미지 선택기의 대리자로 설정합니다. (아마도 이미하고 있습니다)

UIImagePickerController* imagePicker = [[UIImagePickerController alloc] init];
imagePicker.delegate = self;

UIImagePickerController는 내비게이션 컨트롤러의 유형이므로 자신을 UINavigationController 대리자로 설정하고 있습니다. 그런 다음 :

- (void)navigationController:(UINavigationController *)navigationController willShowViewController:(UIViewController *)viewController animated:(BOOL)animated
{
    [[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent];
}

UIStatusBarStyleLightContent를 원하는 스타일로 바꿉니다.


답변

.plist 파일에서 ‘컨트롤러 기반 상태 표시 줄보기’를 NO로 설정 한 경우 허용되는 답변이 작동합니다. 실제로 다른 뷰 컨트롤러에서 상태 표시 줄을 제어 하고이 옵션을 YES로 설정 해야하는 경우 UIImagePickerController가 올바르게 작동하도록하는 다른 방법은 하위 클래스를 만드는 것입니다

// .h
@interface MYImagePickerController : UIImagePickerController
@end

// .m
@implementation MYImagePickerController
- (UIStatusBarStyle)preferredStatusBarStyle
{
    return UIStatusBarStyleLightContent; // change this to match your style
}
@end


답변

나는 같은 문제에 직면했다.

여기 내 해결책이 있습니다. 이것을 이미지 선택기 뷰를 여는 뷰 컨트롤러의 viewWillAppear에 넣습니다.

-(void) viewWillAppear:(BOOL)animated{
[super viewWillAppear:YES];

[[UIApplication sharedApplication] setStatusBarHidden:YES];

}


답변

당신이 이것을 시도 할 수 있습니다. needsStatusBarApperanceUpdate가 작동한다고 생각합니다.

1 -Set UIViewControllerBasedStatusBarAppearance to NO.
2- Call [[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent];
3- [self setNeedsStatusBarAppearanceUpdate];


답변

나는 이것이 적절한 취급을 제공한다는 것을 알았습니다. 두 부분이 있습니다.

- (void)navigationController:(UINavigationController *)navigationController willShowViewController:(UIViewController *)viewController animated:(BOOL)animated
{
    [[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleBlackOpaque];
}


- (void)viewWillAppear:(BOOL)animated {
    [super viewWillAppear:animated];

    [[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleBlackOpaque];
...

UIImagePickerController 자체는 뷰 컨트롤러를 제공하므로이 대리자는 스택의 모든 발표자에게 작동합니다.

viewWillAppear는이 뷰 컨트롤러 자체가 항상 제시된 뷰 컨트롤러가 사라질 때마다 항상 재설정되도록합니다.


답변

나는 같은 문제가 있었다. 정보 plist에 추가 : “아니오”값을 가진 “컨트롤러 기반 상태 표시 줄보기”

여기 예 https://stackoverflow.com/a/19211669

이 솔루션은 저에게 효과적입니다.