Я разрабатываю приложение только для ландшафта на основе xib. Приложение запускается в альбомной ориентации корректно. Однако вид в моем основном ViewController представлен в портретной ориентации. То есть он поворачивается на 90 градусов, чтобы изображение выглядело обрезанным и не занимало весь экран. Если я использую свой интерфейс для представления модального контроллера представления, а затем возвращаюсь к основному ViewController, проблема устраняется сама собой (представление представлено в альбомной ориентации). Эта проблема не возникала в Xcode 4.2. Это произошло после обновления до Xcode 4.3, и единственные изменения кода, которые были сделаны, были автоматически реализованы Xcode при обновлении настроек проекта.
Основываясь на советах в других сообщениях, я проверил свои настройки Info.plist для поддерживаемых ориентаций интерфейса и исходной ориентации интерфейса. Я переопределил метод shouldAutorotateToInterfaceOrientation для каждого из моих контроллеров представления, чтобы он возвращал YES только для альбомной ориентации. Кроме того, я отключил автоматическое изменение размера для представления, так как я никогда не хочу, чтобы размер/ориентация представления изменялись.
Основываясь на идеях в этой ссылке [1], я подозревал, что проблема заключается в том, что представление не получает вызов для изменения ориентации при запуске, возможно, из-за удаления концепции MainWindow.xib, которая, по-видимому, заменена следующим Вставленный Xcode код в AppDelegate.m:
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
self.viewController = [[ViewController alloc] initWithNibName:@"ViewController" bundle:nil];
self.window.rootViewController = self.viewController;
[self.window makeKeyAndVisible];
return YES;
}
Я изменил этот метод, чтобы сгенерировать универсальный корневой контроллер представления, из которого представлен мой класс ViewController, как показано в приведенном ниже коде:
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
ViewController* myViewController = [[ViewController alloc] initWithNibName:@"ViewController" bundle:nil];
self.viewController = [[UIViewController alloc] init];
self.window.rootViewController = self.viewController;
[self.window makeKeyAndVisible];
[self.viewController presentModalViewController:myViewController animated:NO];
return YES;
}
Вуаля! Это решило мою проблему. Однако для меня это похоже на изменение на фундаментальном уровне, чего я не хочу делать на данном этапе своего развития. То, что я намеревался сделать своим корневым контроллером представления, теперь является модальным представлением. У кого-нибудь есть другое решение этой проблемы?
Заранее спасибо!