iphone - iPad 模态视图 Controller 以纵向方式运行,即使它是横向的

标签 iphone objective-c ios ipad rotation

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

我是这样呈现模态的

- (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;
}

在登录 View Controller 中

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

几次轮换后的日志结果:

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 的行为就好像它处于纵向模式一样。我在这个 View 上有两个文本字段,当我点击其中一个时,我想向上移动 View ,这样键盘就不会显示在文本字段上。为了做到这一点,我必须修改 frame.origin.x 而不是 y,因为轴是倒置的( View 就像纵向一样),这会导致很多问题。

编辑:

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

第二次编辑:

我已将代码精简到最基本的部分。我什至不再呈现模态视图 Controller ,只是将该 View Controller 初始化为 Root View Controller ,但这种情况仍在发生。

应用委托(delegate):

- (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;
}

在我的 View Controller 中:

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

最佳答案

好的,所以我终于找到了一种正常工作的方法。看起来如果你只是创建一个新的 View Controller 并呈现它总是会被反转。我找到的修复方法是将 View Controller 放在导航 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];

关于iphone - iPad 模态视图 Controller 以纵向方式运行,即使它是横向的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9583297/

相关文章:

ios - 如何获取 iOS 中可用系统声音的列表?

iphone - Monotouch 替换 RootViewController

ios - Swift:如果删除了 child 的观察者,则不会调用 Firebase 身份验证观察者

iphone - iOS:从 UITableView 动态添加数据到 NSArray

ios - 如何退出带有 "intentional exception"的 iPhone 应用程序?

ios - 抽屉 TableView : dismiss by pulling down

ios - 带有通用 NSFetchRequest 的通用 NSFetchedResultsController 导致错误

ios - UIView通过uitextfield键盘自动移动

iphone - 使用 cocoa touch 在 iPhone 上测量下载速度的最佳方法

ios - 导航栏返回按钮方法