У меня есть дочерний контроллер представления, который должен всегда отображаться в альбомном режиме, независимо от того, в каком режиме находится родительское представление. Я добавляю его в стек представления родительского элемента с помощью
[[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.