1

아주 간단한 일을하려고합니다 :보기 컨트롤러가 1 스택 인 것을 제외하고는 내 응용 프로그램에서 가로 방향 만 지원하십시오. 단순화를 위해 두 개의 UIViewController가 있다고 가정 해 보겠습니다. maskLandscapeVC 및 maskAllVC를 호출 할 수 있습니다. 각각은 사용자 지정 UINavigationController의 자체 인스턴스에 별도로 포함됩니다. 다음은 네비게이션 컨트롤러의 코드입니다.하나의보기 컨트롤러에서 여러 방향 지원하기

#import "MPTLoginNav.h" 

@interface MPTLoginNav() 

@end 

@implementation MPTLoginNav 

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil 
{ 
    self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil]; 
    if (self) { 
     // Custom initialization 
    } 
    return self; 
} 

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 
    // Do any additional setup after loading the view. 
} 

- (void)didReceiveMemoryWarning 
{ 
    [super didReceiveMemoryWarning]; 
    // Dispose of any resources that can be recreated. 
} 

#pragma mark 
#pragma Interface Orientaiton Methods 

- (NSUInteger)supportedInterfaceOrientations 
{ 
    if (self.isMaskAllStack) 
     return UIInterfaceOrientationMaskAll; 

    return UIInterfaceOrientationMaskLandscape; 
} 

- (BOOL)shouldAutorotate 
{ 
    return YES; 
} 

@end 

maskLandscapeVC에서이 코드는 올바르게 작동하며 두 개의 수평 방향 만 사용할 수 있습니다. 사용자는 maskLandscapeVC에서 maskAllVC로 이동할 수 있습니다. 다음 코드는이를 처리합니다.

UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"Storyboard" bundle:[NSBundle bundleForClass:[self class]]]; 
self.maskAllVC = [storyboard instantiateViewControllerWithIdentifier:@"maskAllVC"]; 
[self.navigationController pushViewController:self.maskAllVC animated:YES]; 

maskAllVC에서 코드는 훌륭하게 작동하며 4 방향 모두 지원됩니다.

maskAllVC에서 일단 사용자는 수직 방향으로 전환합니다. maskLandscapeVC는 maskAllVC의 대리자입니다. maskAllVC의 세로 방향에서 사용자가 일부 버튼을 누릅니다. 이 버튼은 일부 조건에 따라 대리자 (maskLandscapeVC)에 대한 호출을 수행하며 maskLandscapeVC는 maskAllVC를 해제하기로 결정합니다. 그것은 지금 다시 maskLandscapeVC에 다음 코드를

[self.maskAllVC.navigationController popViewControllerAnimated:YES]; 
[self.maskAllVC.navigationController dismissViewControllerAnimated:YES completion:nil]; 

를 사용, 방향은 여전히 ​​수직 물론 내 생각이 완전히 그것 때문에 엉망이다.

답변

0

나는 처음보기처럼 전체 ViewController를 정말로 새로 고치지는 않는다는 이유로 다시 돌아 오기 때문에 생각합니다. viewWillAppear 대신에 viewDidLoad를 사용하는 것이 문제 일 수 있습니다. viewDidLoad는 한 번만 호출됩니다.

중단 점을 설정하면 전체 layoutSubview 새로 고침을 수행합니까? 팝업하면 supportedInterfaceOrientations를 호출합니까? viewDidLoad 코드를 viewWillAppear로 이동하면 어떻게됩니까?

관련 문제