2013-04-03 1 views
0

В приложении метода: didFinishLaunchingWithOptions в AppDelegate Я запускаю контроллер представления и добавляю к контроллеру вида навигации, который становится контроллером корневого окна Windows. Поскольку мое приложение для iPad имеет только горизонтальную ориентацию, все мои контроллеры просмотра созданы для пейзажа.makeKeyAndVisible изменяет ориентацию вида iOS 5

Вот код:

self.myViewController = [[MyViewController alloc] init]; 
self.myNavigationController = [[MyNavigationController alloc] initWithRootViewController: self.myViewController]; 
self.window.rootViewController = self.myNavigationController; 
[self.window makeKeyAndVisible]; 

return YES; 

Когда я поставил точку останова на "self.window.rootViewController = self.myNavigationController;" линии и вызова в консоли, чтобы отобразить вид детали, я получаю следующее: $ 0 = 0x0c89d010>

который я прочитал Прямоугольник является режим ориентации (1024 ширина и 748 высота)

Следующая контрольная точка, которая находится на «возвращение ДА;" мне показывает это: $ 1 = 0x0c89d010>

который копирует объект (насколько я могу судить) и изменение ориентации (768 ширины и 1004 высоты)

Это происходит только в iOS5, однако iOS6 работы как ожидалось

Есть ли известная проблема с методом MakeKeyAndVisible, который я должен знать? Возможно, мне недостает моего понимания, как makeKeyAndVisible работает

+0

Вы внедряете методы ориентации для iOS5? – tkanzakic

+0

Это не имеет никакого отношения к 'makeKeyAndVisible' - путь обработки был изменен между iOS 5 и iOS 6 –

+0

Я реализую shouldAutorotateToInterfaceOrientation: метод в моем контроллере просмотра, чтобы убедиться, что это пейзаж. – 2013-04-03 08:06:49

ответ

0

Попробуйте создать пользовательский UINavigationController со всеми методами ориентации внутри него и использовать его в своем приложении.

Было бы что-то вроде этого

CustomNavigationController.h

#import <UIKit/UIKit.h> 
@interface CustomNavigationController : UINavigationController 
@end 

CustomNavigationController.m

#import "CustomNavigationController.h" 


@interface CustomNavigationController() 

@end 

@implementation CustomNavigationController 


//overriding shouldAutorotateToInterfaceOrientation method for working in navController 

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation { 

    return [self.topViewController shouldAutorotateToInterfaceOrientation]; 

} 

//other methods 

Таким образом, ваши ориентации будут работать соответствующим образом в своих соответствующих viewCotrollers ,

+0

Это потенциально похоже на overkill –

+0

Вот как я решил проблемы с ориентацией в моих приложениях при использовании navigationController. – nsgulliver

+0

Прошло некоторое время с тех пор, как я перепутался с ним, но я подумал, что 'UINavigationController' по умолчанию использовал функцию shouldAutoRotateToInterfaceOrientation viewController:' anyway –