2009-04-23 9 views
3

Ich arbeite an einer Anwendung, die vollständig im Querformatmodus arbeitet (UIStatusBarHidden = YES und UIInterfaceOrientation = UIInterfaceOrientationLandscapeRight). Ich bin mit einem Navigation, mit meinem RootViewController (Mainviewcontroller) Setup wie folgt aus:UINavigationController Auto-Rotation zu Querformat aktualisiert UIView-Rahmen nicht

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

In meinem Mainviewcontroller, ich bin der Ansicht, wie das Laden:

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

Dann in Mainview, ich m Laden Subviews wie folgt aus:

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

Mein Problem ist, dass Mainview korrekt im Landschaftsmodus macht (trotz des Rahmens ging in [Mainview Initwithframe:] im Portrait zu sein), während das Kind P DFView wird zu einem Portrait-Frame gerendert. [UIView Initwithframe:] Implementierungen wie folgt aus: Ich habe auch mit Anwenden der Transformationen in meinem experimentierte

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

Aber das scheint nicht, da der Rahmen Wert falsch ist zu arbeiten. Das Ignorieren der Rahmen und die Schaffung eines manuell wie dies in einigen Fällen zu funktionieren scheint:

CGRectMake(0.0, 0.0, 480.0, 320.0) 

Aber natürlich machen die manuelle Anpassungen, wie das ist weniger als ideal.

Irgendwelche Ideen?

Antwort

1

Ich weiß nicht, ob dies in Ihrem Fall hilft, aber stellen Sie sicher, dass alle Ihre Ansichten und Steuerelemente Autorotate unterstützen. Der UINavigationController tut dies nicht, ebenso wenig wie der UITabBarController. Der Tab-Leiste-Controller wird es nicht mehr unterstützen, wenn eine seiner untergeordneten Ansichten AutoRotate nicht unterstützt. Ich musste meinen eigenen UINavigationController erstellen und ihn von UINavigationController erben lassen und dann das Autorotate implementieren. Da Sie Ihre Anwendung vollständig im Querformat ausführen, weiß ich nicht, ob dies hilft oder nicht, aber es könnte Sie dazu bringen, einen Weg zu Ihrer Lösung einzuschlagen.

+0

@ryan wie haben Sie von der UINavigationController geerbt. –

0

Ich stieß auf ein ähnliches Problem mit einem MapView. Grundsätzlich müssen Sie sicherstellen, dass alle Ihre Subviews implementieren:

view.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight;

Verwandte Themen