旋转后UIImagePickerController的状态栏和布局问题

时间:2012-10-24 17:17:36

标签: ios uiimagepickercontroller autorotate uistatusbar

tl; dr:如果应用程序显示状态栏,则在拍照时旋转iPad时用户界面布局会中断。

我有一个应用程序,显示应该通过UIImagePickerController拍摄照片的状态栏。

我在带有Xcode 4.51的iPad 3,iOS 6上运行此功能

我注意到的第一个问题是,如果我没有通过

隐藏状态栏
[[UIApplication sharedApplication] setStatusBarHidden:YES withAnimation:UIStatusBarAnimationNone];

之前的

[self presentViewController:imagePicker animated:YES completion:nil];

然后UIImagePickerController将无法在屏幕上正确显示。状态栏的空间仍然会被保留(但没有显示时间或电池信息等),导致屏幕下端的控件部分偏离屏幕。

所以,我添加了一行

[[UIApplication sharedApplication] setStatusBarHidden:YES withAnimation:UIStatusBarAnimationNone];

在提出UIImagePickerController之前,第一个问题就解决了。

现在出现了第二个问题(由第一个问题的解决方案引起)。当我调出UIImagePickerController时,旋转iPad并关闭它(通过“取消”或“使用”,无所谓),处理程序(imagePickerControllerDidCancelimagePickerController:didFinishPickingMediaWithInfo:被调用,我再次通过

显示状态栏
[[UIApplication sharedApplication] setStatusBarHidden:NO withAnimation:UIStatusBarAnimationNone];

问题是现在显示状态栏,但应用程序的其余部分似乎并不知道它再次出现在屏幕上。 (我在“MainViewController”上的UIToolbar部分隐藏在状态栏后面。)有趣的是,如果我将iPad旋转到任何其他方向,则在动画结束后再次正确显示。

有人可以给我任何关于如何解决这个问题的提示吗? (目前我最好的工作是在第一次有人拍照后隐藏状态栏,但那是次优的)。也许对第一个问题有更好的解决方案,或者可能是解决这两个问题的方法。

更多信息:在UIImagePickerController处于活动状态时将iPad旋转到横向状态后,这是我的MainViewController视图框架的框架:{{0,0},{1024,768}}(即,在这种情况下有问题)。当我一直以横向方向放置iPad时,这是在UIImagePickerController被解除后的MainViewController视图框架:{{0,0},{1024,748}}(这是没有横向的情况)问题)。

提前感谢您的关注和努力!

1 个答案:

答案 0 :(得分:3)

我在iPhone上遇到同样的问题,当时显示一个从相机拍摄图像的图像选择器。我找到的解决方案是在弹出图像选择器的视图重新出现时打电话显示状态栏。例如

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

    [[UIApplication sharedApplication] setStatusBarHidden:NO withAnimation:UIStatusBarAnimationSlide];
}