2009-04-23 4 views
3

Я работаю над приложением, которое полностью работает в ландшафтном режиме (UIStatusBarHidden = YES и UIInterfaceOrientation = UIInterfaceOrientationLandscapeRight). Я использую NavigationController, с моей RootViewController (MainViewController) установки, как это:UINavigationController Auto-Rotation to Landscape не обновляет фрейм UIView

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation { 
    return (interfaceOrientation == UIInterfaceOrientationLandscapeRight); 
} 

В моей MainViewController, я загружаю мнение так:

- (void)loadView { 
    CGRect frame = [[UIScreen mainScreen] applicationFrame]; // This returns a portrait frame 
    MainView *view = [[MainView alloc] initWithFrame:frame]; 
    self.view = view; 
    [view release]; 
} 

Тогда в MainView, я м погрузочные подвиды, как это:

- (id)initWithFrame:(CGRect)frame { 
    if (self = [super initWithFrame:frame]) { 
    self.pdfView = [[PDFView alloc] initWithFrame:frame]; 
    [self addSubview:pdfView]; 
    } 
    returnself; 
} 

Мой вопрос заключается в том, что MainView правильно делает в ландшафтном режиме (несмотря на кадр, перешедшей в [MainView initWithFrame:] быть в портретном), в то время как ребенок P DFView отображает рамку портрета. Я также экспериментировал с применением преобразований в моем [UIView initWithFrame:] реализации, как это:

view.center = CGPointMake(view.frame.size.height/2.0, view.frame.size.width/2.0); 
view.transform = CGAffineTransformRotate(view.transform, (M_PI/2.0)); 

Но это, кажется, не работает, так как значение кадра неверно. Не обращая внимания на кадр и создавая один вручную, как это, кажется, работает в некоторых случаях:

CGRectMake(0.0, 0.0, 480.0, 320.0) 

Но очевидно, что делать корректировки вручную, как это меньше, чем идеал.

Любые идеи?

ответ

1

Я не знаю, поможет ли это в вашем случае, но убедитесь, что все ваши взгляды и элементы управления поддерживают авторотацию. UINavigationController этого не делает, также UITabBarController. Контроллер панели вкладок перестанет поддерживать его, если какой-либо из его дочерних представлений не поддерживает авторотирование. Я должен был создать свой собственный UINavigationController и сделать его наследованием от UINavigationController, а затем реализовать авторотирование. Поскольку вы полностью используете свое приложение в ландшафте, я не знаю, помогает это или нет, но вы можете начать путь к вашему решению.

+0

@ryan, как вы наследовали от UINavigationController. –

0

Я столкнулся с аналогичной проблемой с MapView. В основном вы должны убедиться, что все ваши подпрограммы реализованы:

view.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight;

Смежные вопросы