Ios UINavigationController设置视图控制器自动旋转问题
我在堆栈中提供了一个带有两个视图控制器的Ios UINavigationController设置视图控制器自动旋转问题,ios,uinavigationcontroller,ios7,autorotate,Ios,Uinavigationcontroller,Ios7,Autorotate,我在堆栈中提供了一个带有两个视图控制器的UINavigationController,并首先提供了最后一个视图控制器。点击后退按钮显然会返回到第一个视图控制器 navCtrl = [[UINavigationController alloc] init]; ViewController1 *vc1 = [[ViewController1 alloc] init]; ViewController2* vc2 = [[ViewController2 alloc] init];
UINavigationController
,并首先提供了最后一个视图控制器。点击后退按钮显然会返回到第一个视图控制器
navCtrl = [[UINavigationController alloc] init];
ViewController1 *vc1 = [[ViewController1 alloc] init];
ViewController2* vc2 = [[ViewController2 alloc] init];
[navCtrl setViewControllers:[NSArray arrayWithObjects:vc1, vc2, nil] animated:NO];
[self presentViewController:navCtrl animated:YES completion:^{
}];
问题是,当我在横向模式下按下导航控制器上的后退按钮时,view controller vc1帧不正确。框架为(0,0320568),以横向模式布置。我正在运行iOS 7。按下后退按钮时不会调用自动旋转代码
然而,如果我用自然顺序vc1,vc2呈现导航控制器,我看不到任何问题
编辑:仅供参考,以下是vc1中的-viewwillbeen
和-viewdidebeen
调用:
- (void)viewWillAppear:(BOOL)animated
{
[super viewWillAppear:animated];
self.navigationController.navigationBar.barStyle = UIBarStyleBlackTranslucent;
[[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleBlackTranslucent];
[[UIApplication sharedApplication] setStatusBarHidden:NO
withAnimation:UIStatusBarAnimationNone];
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(keyboardWillShow:)
name:UIKeyboardWillShowNotification
object:nil];
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWillHide:)
name:UIKeyboardWillHideNotification
object:nil];
NSLog(@"Frame = %@", NSStringFromCGRect(self.view.frame));
}
我发现了问题。对于一些我不记得的旧iOS bug解决方法,我在viewDidLoad中有以下行
[self.navigationController.view setFrame:[self.navigationController.view-bounds] 这里有几件事需要检查:
你说你已经检查过了,但是为了安全起见-检查视图上的自动调整大小
视图控制器是否实现以下方法
- (NSUInteger)supportedInterfaceOrientations;
是否将导航控制器显示为子视图控制器?执行此操作时,请确保以下方法返回其默认值
YES
- (BOOL)shouldAutomaticallyForwardRotationMethods;
检查是否未将子视图控制器添加到
UINavigationController
的视图中,因为它不会转发外观方法,最好从导航控制器上的视图控制器中处理
如果上述所有操作都失败,您应该在vc1的
视图中将出现一个断点
,并检查其帧,如果帧正确,但导航控制器。视图
帧不正确,则您必须检查自动调整大小的遮罩。您能看看我的问题吗:
- (BOOL)shouldAutomaticallyForwardRotationMethods;