.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
이 솔루션은 저에게 효과적입니다.