2016-07-20 10 views
1

Ich habe eine App, die nur Portait-Modus ist. Ich habe nur einen View Controller, den ich in den Landscape-Modus versetzen muss (eine Kundensignaturansicht), damit der Kunde mehr Platz zum Signieren hat.Force Landscape Ansicht auf nur einem UIViewController

Wie kann ich einen ViewController zwingen, im Querformat zu erscheinen. Den Rest im Porträt lassen?

Ich habe versucht, die Informationen zu Portait Allgemein Deployment App Einstellung, Landschaft links

enter image description here

Und dann auf der Signature-Ansicht mit diesem Code

- (BOOL)shouldAutorotate { 
    return YES; 
} 

und Rückkehr NO auf allen anderen View-Controllern. Aber das schien nicht zu funktionieren.

Ich habe auch

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

Ist das möglich?

+0

Haben Sie das versucht http://stackoverflow.com/questions/26357162/how-to-force-view-controller-orientation-in-ios-8? –

+0

@TejaNandamuri Ich habe es versucht. Aber die Aussicht ist leer. Ich verwende Storyboards für den ViewController, denen eine programmatisch erstellte Ansicht hinzugefügt wurde. –

+0

Ja ist möglich, überprüfen Sie diese https://stackoverflow.com/questions/38308919/unable-to-force-uiviewcontroller-orientation/38308987#38308987 –

Antwort

0

Sie verpassen nur den folgenden Code unten, wenn Ihr UIViewController ein rootcontroller eines Navigationscontrollers ist, müssen Sie den Code in den Navigationscontroller setzen. Hoffe, das hilft, viel Glück.

- (UIInterfaceOrientationMask)supportedInterfaceOrientations 
{ 
    return UIInterfaceOrientationMaskLandscape; 
} 
+0

Das half halb. Auto-Layout scheint aus dem Fenster geworfen zu werden, da alle Elemente falsch angeordnet sind. Wenn ich die Landschaftsansicht verlasse, bleiben alle anderen Ansichten in der Landschaft. –

+0

Könnten Sie ein Bild von dem, wie Ihr Storyboard aussieht, mit den Einschränkungen, die Sie verwenden, und wie es falsch in der Landschaft aussieht, posten. Also habe ich diesen Fluss benutzt und es funktioniert, navigationcontroller A -> viewcontroller A -> segue -> navigationcontrollerB -> viewcontrollerB, in navB setze ich 'supportedInterfaceOrientations' und 'shouldAutorotate', vcA erscheint im Hochformat, vcB erscheint im Querformat, ich muss '' verwenden self.navigationController disneyViewControllerAnimated', um von vcB zu vcA zu springen. – JingJingTao

0

Versuchen Sie diesen Code in dem Signature-View-Controller

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 
    [[UIDevice currentDevice] setValue:[NSNumber numberWithInteger:UIInterfaceOrientationLandscapeLeft] forKey:@"orientation"]; 
} 

-(void)viewWillDisappear:(BOOL)animated 
{ 
    [super viewWillDisappear:animated]; 
    [[UIDevice currentDevice] setValue:[NSNumber numberWithInteger:UIInterfaceOrientationPortrait] forKey:@"orientation"]; 
} 
0

Es folgt das die Art und Weise seines für mich arbeiten: -

-(UIInterfaceOrientationMask)supportedInterfaceOrientations 
{ 
    return UIInterfaceOrientationMaskLandscapeLeft; 
} 

and 

- (BOOL)shouldAutorotate { 
    return NO; 
} 

Eine weitere Möglichkeit ist die Orientierung in prepareForSegue zu definieren und fest Orientierung der erforderlichen VC und set sollteAutorotate zu NO in diesem VC.

Lassen Sie mich wissen, wenn erwähnte Code für Sie nicht funktioniert.