при настройке setStatusBarHidden: в приложении iOS v5. Пустое пространство остается. Это правильный способ исправить это? - PullRequest
4 голосов
/ 29 декабря 2011

Я хотел переключить StatusBar в моем универсальном приложении iOS v5.

Но обнаружил, что, как кажется, другие имеют, что UIViews (в моем случае subViews, добавленные к основному представлению) только возвращают 20px, оставленные скрытымstatusBar, если вы затем поворачиваете устройство (я использую симулятор)

И мои просмотры выполняются программно.

Я попробовал некоторые из предложений, найденных путем поиска в Google, но ни одно из них не помогло.т.е. изменение авторазмера / маски, wantFullScreenLayout, setNeedsLayout, в IB «использовать полный экран».

Я наконец-то понял, что я устанавливаю свои виды высота кадра на 0 иэто высота границ до [[UIScreen mainScreen] applicationFrame] size.height

То, что я придумал: настройка представлений высота кадра до -20 и высота границ до [[UIScreen mainScreen] applicationFrame] size.height + 20

В viewDidLoad.

CGRect theDeviceRect= [[UIScreen mainScreen] applicationFrame];
newMap.frame = CGRectMake(0, -20, theDeviceRect.size.width, theDeviceRect.size.height+20);

У меня также есть это в willAnimateRotationToInterfaceOrientation: делегат.

Теперь, когда я переключаю строку состояния с помощью:

- (void) toggleStatusBarAction:(id)sender{
  BOOL istathidden=  [[UIApplication sharedApplication] isStatusBarHidden];

   [[UIApplication sharedApplication] setStatusBarHidden:!istathidden withAnimation:UIStatusBarAnimationFade];
    }

Всеработает как положено.Но я хотел посмотреть, является ли мое решение хорошим или плохим способом решения этой проблемы и что-то мне не хватает?:

Большое спасибо заранее.MH

1 Ответ

7 голосов
/ 07 января 2012

Что я делаю, это:

После этого кода:

[[UIApplication sharedApplication] setStatusBarHidden:NO];

Я немедленно выполню:

CGRect originalFrame = self.view.frame;
originalFrame.origin.y = 20.0;
self.view.frame = originalFrame;

Это как бы "обновляет" кадр до правильной позиции. Не лучшее решение, но оно работает.

В вашем примере вам может понадобиться динамически установить y на 0 или 20. В зависимости от istathidden.

Редактировать 2 / СЕНТЯБРЬ / 2012: Лучшее решение при отклонении модального контроллера представления:

[[UIApplication sharedApplication] setStatusBarHidden:NO];
self.view.frame = [[UIScreen mainScreen] applicationFrame];
...