Вращающийся вид оставляет зазор 20 пикселей на одной стороне - PullRequest
0 голосов
/ 16 февраля 2011

У меня есть дочерний контроллер представления, который должен всегда отображаться в альбомном режиме, независимо от того, в каком режиме находится родительское представление. Я добавляю его в стек представления родительского элемента с помощью

[[self navigationController] pushViewController:controller animated:NO];

пытаясь заставить вид вращаться и отображаться так, как будто устройство удерживается в альбомной ориентации, даже если оно все еще находится в книжной ориентации.

Единственная проблема заключается в том, что независимо от того, какой размер и координаты я установил для рамки просмотра, в правой части экрана я вижу промежуток в 20 пикселей, в котором находился StatusBar во время портретного режима.

Что я могу настроить, чтобы этот пробел исчез?

Вот как я делаю преобразование (как рекомендовано в этой статье SO )

- (void)changeOrientationToLandscape
{
    UIApplication *myApp = [UIApplication sharedApplication];

    CGAffineTransform landscapeTransform = CGAffineTransformMakeRotation( degreesToRadian(90) );
    landscapeTransform = CGAffineTransformTranslate(landscapeTransform, +90.0, +90.0 );
    [self.view setTransform:landscapeTransform];

    // Change the status bar orientation so it's shown as if we're in landscape
    myApp.statusBarOrientation = UIInterfaceOrientationLandscapeLeft;

    // Manually force view frame - this doesn't seem to fix the 20 pixel gap
    self.view.frame = CGRectMake(0, 0, 480, 320);
}

Единственный раз, когда я вижу, что весь экран занимает весь экран ибез 20-пиксельного промежутка, если я все вместе скрою строку состояния, я ничего не могу сделать для этого приложения.

Вот как выглядит экран (он удерживается в книжной ориентации с кнопкой «Домой» внизу).Обратите внимание, что конец строки состояния не имеет того же фиолетового фона - я надеялся, что смогу сместить вид так, чтобы пропасть не исчезла.

Я также распечатал рамки вида view и navigationController иони оба сообщают x и y местоположение в 0,0.Измеренный размер фрейма навигационного вида составляет 320х480, а рамы вида - 480х320.

View shifted with 20 pixel gap at top

Ответы [ 2 ]

0 голосов
/ 16 февраля 2011

Вы можете скрыть строку состояния только для вашего дочернего контроллера представления.

Если вы отправляете свой дочерний контроллер представления через self.navigationController, просто переопределите shouldAutorotateToInterfaceOrientation в дочернем контроллере представления и вставьте это ...

return UIInterfaceOrientationIsLandscape( interfaceOrientation );

... к телу этого метода, чтобы сделать его только ландшафтным.

0 голосов
/ 16 февраля 2011

Как насчет отключения строки состояния, когда ребенок нажимается, и включения, когда она "вытолкнута"?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...