2014-12-07 7 views
0

UIViewControllerBasedStatusBarAppearancepreferredStatusBarStyle을 사용하여 상태 표시 줄의 색과 모양을 관리하고 있습니다.자르기에서 UIImagePickerController 상태 표시 줄 문제가 발생했습니다.

내 앱을 사용하면 사용자는 자신의 카메라 롤에서 사진을 선택하고 자르기 옵션 UIImagePickerController을 사용하여 사각형으로자를 수 있습니다.

따라서 UIImagePickerController을 누르고 자르기 화면을 가져 오기 위해 편집 할 수 있도록 설정하십시오.
문제는, 앨범 및 사진보기에서 상태 표시 줄이 흰색으로 표시되고 자르기보기에서 상태 표시 줄을 숨기고 싶습니다.

preferredStatusBarStyle으로 어떻게 할 수 있습니까?

지금까지 내가 UIImagePickerController에 대한 카테고리를 만들어 구현 :

- (UIStatusBarStyle)preferredStatusBarStyle { 
    return UIStatusBarStyleLightContent; 
} 

이 실제로 사진에서 화이트 색상에 대한 상태 표시 줄을 설정할 수 있지만보기를 자르 갈 때, 상태 표시 줄이 검은 색이되고, 그 수 나는 그것을 숨기고 배경이 검은 색이어서 당신이 그것을 볼 수 없기 때문에 나를 위해 좋다. 그러나 배터리 표시가 녹색이다! 그래서 당신은 상태 표시 줄에 배터리 표시등 만 볼 수 있습니다!

어떻게 해결할 수 있습니까? 자르기보기에서만 상태 표시 줄을 숨길 수 있습니까?

답변

0

여기에 약간의 탐정 작업을해야 할 것입니다. 그러나 나는 당신에게 리드를 줄 수 있습니다.

서브 클래스 UIImagePickerController을 제안하고 표시된 하위 컨트롤러에 따라 상태 표시 줄 환경 설정을 반환하십시오.

- (BOOL)prefersStatusBarHidden; 
- (UIStatusBarStyle)preferredStatusBarStyle 

단순히 그들을 무시, 필요 없음 super 전화 :

의 UIViewController는 상태 표시 줄 가시성과 모양을 제어 할 수있는 두 가지 방법이있다.

하위 컨트롤러 내에 뷰 컨트롤러를 스택에 액세스 할 수 있으므로 스택의 컨트롤러 수에 따라 상태 표시 줄의 기본 스타일과 가시성을 선택할 수 있습니다.

새로운 하위 컨트롤러가 스택을 누를 때마다 UIKit에서 preferredStatusBarStyleprefersStatusBarHidden을 ping 할 것 같은 느낌이 들었습니다.

다음 호출하여 상태 표시 줄을 업데이트 UIKit을 강제 할 수없는 경우 UIImagePickerController 이후

[self setNeedsStatusBarAppearanceUpdate] 

당신이 그것을에 자신의 대리자를 지정할 수 있습니다 UINavigationController의 하위 클래스, 새로운 컨트롤러가 스택에 밀어 때 모니터링하고 전화 위의 제안 된 코드.

+0

하지만 내 문제는 어떤 컨트롤러가 UIImagePickerController를 밀어 넣고 있는지 알지 못한다는 것입니다. 예를 들어 앨범, 사진 및 자르기와 같은 여러보기 컨트롤러를 스택에 넣을 수 있습니다. 작물 컨트롤러의 상태 표시 줄 만 숨기려면 어떻게 알 수 있습니까? – Mario

+0

맞습니다. 아마도'NSStringFromClass (self.topViewController.class)'를 사용하여 private 클래스의 문자열 이름을 얻을 수 있습니다. 이렇게하면 컨트롤러를 식별 할 수 있습니다. – Andy

+1

'setNeedsStatusBarAppearanceUpdate'가 사용되지 않는 한, 부모 뷰 컨트롤러의'prefersStatusBarHidden'는 자식이 푸시 될 때 다시 호출되지 않는다는 것을 알게 될 것입니다. –

0

Andy의 게시물에 대한 일종의 하위 분류 UIImagePickerController은 금지되었지만 지금은 허용됩니다. 그래도 예상치 못한 문제가 발생하여 prefersStatusBarHiddenpreferredStatusBarStyle을 무시하려고합니다.

참고 : UIImagePickerControllerUINavigationController의 서브 클래스이므로 하위 뷰 컨트롤러 용 컨테이너입니다. 컨테이너 뷰 컨트롤러가 자식에 대한 상태 표시 줄 및 스타일을 제어하는 ​​방법은 childViewControllerForStatusBarHiddenchildViewControllerForStatusBarStyle을 재정의하는 것입니다.일반적으로 UINavigationController에서는이를 구현하지 않고 현재 표시되는보기 컨트롤러를 반환하기 위해 우선합니다.

하위보기 컨트롤러를 제어하지 않는 경우에는 선택기 하위 클래스가 nil을 반환하기 위해 이러한 메서드를 재정의 할 수 있으므로 prefer 메서드를 구현해야합니다. 이론적으로는 적절한 시간에 필요한 것을 반환하도록 설정해야하지만 내 경험에 의해 입증 된 것처럼 UIImagePickerController과 상태 표시 줄 스타일로 계속 생선이납니다.


내 자신의 UIImagePickerController 서브 클래스의 경우, 나는 그것의 사용자 정의 UI 지정된 아이 뷰 컨트롤러에 대한 상관 없어,하지만 난 childViewController..에서 nil를 반환하고 prefer 방법을 무시 실험했습니다. 나는 잘 작동하도록 가시성을 제어하는 ​​것으로 나타 났지만 LightContentpreferredStatusBarStyle에서 돌려주는 하위 클래스를 방해하는 피커의 무언가를 발견했습니다. my own question을 참조하십시오.