2009-04-23 6 views
3

私は完全にランドスケープモード(UIStatusBarHidden = YESおよびUIInterfaceOrientation = UIInterfaceOrientationLandscapeRight)で動作するアプリケーションで作業しています。私は、MAINVIEWに続いてUINavigationControllerランドスケープへの自動回転でUIViewフレームが更新されない

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

:私はこのようなビューをロードしています、私のMainViewControllerで

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

:私は私のrootViewControllerこのような(MainViewController)設定で、NavigationControllerを使用していますこのようなメートルローディングサブビュー:

- (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を作成するいくつかのケースで動作しているようです。

アイデア?

答えて

1

これがあなたのケースで役立つかどうかわかりませんが、すべてのビューとコントロールが自動回転をサポートしていることを確認してください。 UINavigationControllerは、UITabBarControllerもそうでもありません。いずれかの子ビューが自動回転をサポートしていない場合、Tab Barコントローラーはそれをサポートしなくなります。私自身のUINavigationControllerを作成し、それをUINavigationControllerから継承させてから、自動回転を実装する必要がありました。あなたがアプリケーションをランドスケープで完全に実行しているので、これが役立つかどうかは分かりませんが、ソリューションへの道を切り開く可能性があります。

+0

@ryanどのようにUINavigationControllerから継承しましたか。 –

0

MapViewで同様の問題が発生しました。基本的には、すべてのサブビューが実装されていることを確認する必要があります。

view.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight;