iPad 模态视图控制器以纵向动作,即使它是横向的 [英] iPad modal view controller acting in portrait even though it's landscape

查看:25
本文介绍了iPad 模态视图控制器以纵向动作,即使它是横向的的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我在横向模式下呈现 ModalViewController 时遇到了一些困难.基本上,它会以正确的界面方向显示,并且仅当设备处于横向模式时才会旋转,但视图控制器的行为就像处于纵向模式一样.

I'm having some difficulty presenting a ModalViewController in landscape mode. Basically it shows up in the proper interface orientation and rotates only when the device is held in landscape mode but the viewcontroller acts as if it is in portrait mode.

我正在展示这样的模态

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
    // Override point for customization after application launch.
    self.viewController = [[ViewController alloc] initWithNibName:@"ViewController" bundle:nil];
    UINavigationController *navController = [[UINavigationController alloc] initWithRootViewController:self.viewController];
    self.window.rootViewController = navController;
    [self.window makeKeyAndVisible];

    LoginViewController *lvc = [[LoginViewController alloc] initWithNibName:@"LoginViewController" bundle:[NSBundle mainBundle]];
    [self.window.rootViewController presentModalViewController:lvc animated:NO];

    return YES;
}

在登录视图控制器中

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
{
    // Return YES for supported orientations
    NSLog(@"%@",NSStringFromCGRect(self.view.frame));
    return UIInterfaceOrientationIsLandscape(interfaceOrientation);
}    

几轮旋转后的日志结果:

The log results after a couple of rotations :

2012-03-06 13:51:49.308 OrientationTest[3132:207] {{0, 0}, {1024, 748}}
2012-03-06 13:51:49.310 OrientationTest[3132:207] {{0, 0}, {1024, 748}}
2012-03-06 13:51:49.310 OrientationTest[3132:207] {{0, 0}, {1024, 748}}
2012-03-06 13:51:49.310 OrientationTest[3132:207] {{0, 0}, {1024, 748}}
2012-03-06 13:51:49.313 OrientationTest[3132:207] {{0, 20}, {1024, 748}}
2012-03-06 13:51:49.314 OrientationTest[3132:207] {{0, 0}, {748, 1024}}
2012-03-06 13:51:49.315 OrientationTest[3132:207] {{20, 0}, {748, 1024}}
2012-03-06 13:51:50.991 OrientationTest[3132:207] {{20, 0}, {748, 1024}}
2012-03-06 13:51:50.991 OrientationTest[3132:207] {{20, 0}, {748, 1024}}
2012-03-06 13:51:51.647 OrientationTest[3132:207] {{20, 0}, {748, 1024}}
2012-03-06 13:51:51.648 OrientationTest[3132:207] {{0, 0}, {748, 1024}}
2012-03-06 13:51:53.481 OrientationTest[3132:207] {{0, 0}, {748, 1024}}
2012-03-06 13:51:53.482 OrientationTest[3132:207] {{0, 0}, {748, 1024}}
2012-03-06 13:51:53.897 OrientationTest[3132:207] {{0, 0}, {748, 1024}}
2012-03-06 13:51:53.898 OrientationTest[3132:207] {{20, 0}, {748, 1024}}

基本上,loginViewController 就像处于纵向模式一样.我在这个视图上有两个文本字段,当我点击其中一个时,我想向上移动视图,这样键盘就不会显示在文本字段上.为了做到这一点,我必须修改 frame.origin.x 而不是 y,因为轴是倒置的(视图就像纵向一样),这会导致很多问题.

Basically the loginViewController acts as if it was in portrait mode. I have two text fields on this view and when i tap on one of them i want to move the view up so the keyboard is not displayed over the text field. In order to do this i have to modify the frame.origin.x instead of y because the axis are inverted (view is acting like portrait) and this is causing a lot of issues.

如果我将 LoginViewController 上的模态演示样式更改为 UIModalPresentationPageSheet,它会按预期工作,因此仅全屏模式存在一些问题

If i change the modal presentation style on LoginViewController to UIModalPresentationPageSheet it works as intended so there is some issue with the fullscreen mode only

第二次

我已将代码精简为基础.我什至不再展示模态视图控制器,只是将该视图控制器初始化为根视图控制器,但这种情况仍在发生.

I've stripped down the code to basics. I'm not even presenting a modal view controller anymore just initializing that view controller as the root view controller and still this is happening.

应用委托:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
    // Override point for customization after application launch.
    self.viewController = [[ViewController alloc] initWithNibName:@"ViewController" bundle:nil];
    self.window.rootViewController = self.viewController;
    [self.window makeKeyAndVisible];
    return YES;
}

在我的视图控制器中:

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
{
    // Return YES for supported orientations
    NSLog(@"%@",NSStringFromCGRect( self.view.frame));
    return UIInterfaceOrientationIsLandscape(interfaceOrientation);
}

推荐答案

好的,所以我终于找到了一种让它正常工作的方法.似乎如果您只是创建一个新的视图控制器并呈现它总是会被反转.我发现的解决方法是将视图控制器放在导航控制器中.

Ok , so i finally found a way for this to properly work. It seems if you just create a new view controller and present that it will always be inverted. The fix i found was the put the view controller in a navigation controller.

LoginViewController *lvc = [[LoginViewController alloc] initWithNibName:@"LoginViewController" bundle:[NSBundle mainBundle]];
UINavigationController *nvc = [[UINavigationController alloc] initWithRootViewController:lvc];
nvc.navigationBarHidden = YES;
lvc.modalPresentationStyle = UIModalPresentationFullScreen;
lvc.parentView = self.navController.view;
[self.window.rootViewController presentModalViewController:nvc animated:NO];

这篇关于iPad 模态视图控制器以纵向动作,即使它是横向的的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
相关文章
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆