【问题标题】:UIInterfaceOrientation rotation in subview not working子视图中的 UIInterfaceOrientation 旋转不起作用
【发布时间】:2011-08-02 07:38:39
【问题描述】:

在我的应用程序中,我使用了一个 UITabbarController,它可以完美地旋转到所有视图控制器中的所有 UIInterfaceOrientations。但是当我之后将 UIView 添加到 UIWindow 时,它不会添加到当前的 UIInterfaceOrientation 中,而是始终添加到 UInterfaceOrientationPortrait 中(这是应用程序的默认设置)。它也不会旋转到新的方向。我使用以下方法添加 ViewController:

LoginViewController *loginViewController = [[LoginViewController alloc] init];
[self.window addSubview:[loginViewController view]];

我有

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {
    return YES;
}
- (void)willRotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration {
    NSLog(@"%@", @"YES IT WILL!");
}

在 LoginViewController.m 中,但永远不会记录任何内容。知道为什么子视图不会旋转吗?

侧滑

编辑: 找到了解决方案: 显然 UIWindow 应该只有一个子视图,而不是更多,否则事情会一团糟,所以我打电话:

LoginViewController *loginViewController = [[LoginViewController alloc] init];
[tabBarController presentModalViewController:loginViewController animated:YES];

相反,它会自动旋转 loginviewcontrollers 视图。

【问题讨论】:

  • +1 你的答案是我一直需要的——我的观点正在发挥作用,太令人难以置信了。我尝试通过用户界面方向发布用户界面方向通知代表,这太疯狂了。目前的模态视图控制器正是我所需要的。干杯。

标签: iphone objective-c subview uiinterfaceorientation uiwindow


【解决方案1】:

我在另一个视图中有一个视图,当旋转发生时,只有父级 willRotateToInterfaceOrientation 被调用,所以我所做的就是将 [self.subViewController willRotateToInterfaceOrientation:toInterfaceOrientation duration:duration]; 添加到父级的 willRotateToInterfaceOrientation 方法中。

【讨论】:

  • 这似乎是一个有点脏的解决方案,而且在我的示例中,有两个 uiwindow 子视图,其中只有一个行为正确 :) 谢谢。
【解决方案2】:

当您向窗口添加新的子视图时,您也必须使窗口旋转。

【讨论】:

  • 我该怎么做? uitabbarcontrollers 视图以完全相同的样式添加到 uiwindow:'[self.window addSubview:tabBarController.view];'并且自动旋转可以完美地使用它,无需做任何特殊的事情来旋转窗口
  • 首先,使用 nib 名称初始化视图,LoginViewController *loginViewController = [[LoginViewController alloc] initWithNibName:@"nameOfXIB" bundle:nil]; [self.window addSubview:[loginViewController 视图]];并检查旋转是否正常
  • 为什么要用NIB初始化它?无论如何,自己找到了解决方案。看看编辑。
  • 只是为了回答您的问题,为什么要 initWithNibName...有两种相互排斥的方式来指定这些视图:手动或使用 nib 文件。如果手动指定视图,则必须实现 loadView 方法并使用它将根视图对象分配给视图属性。如果使用 nib 文件指定视图,则不能覆盖 loadView,而应在 Interface Builder 中创建 nib 文件,然后使用 initWithNibName:bundle: 方法初始化视图控制器对象。
  • 我不喜欢InterfaceBuilder,我更喜欢按代码构建界面..顺便说一句,您不必覆盖loadview,您可以..大多数调整发生在viewdidload中您添加子视图..但这一切都与我最初的问题无关:)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-09-11
  • 1970-01-01
  • 2014-10-07
  • 1970-01-01
  • 2012-11-08
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多