在横向模式下保持控件,但允许uitabbar切换

时间:2011-04-27 22:25:00

标签: iphone ios uiview uitabbar uiinterfaceorientation

当iphone改变方向并且工作正常时,我有一个UITabBar开关位置,但我希望第一个标签视图中的控件保持静止,而不管手机的位置如何。 我觉得我错过了一些明显的东西?

编辑: 基本上,控件始终是横向的,但是标签栏必须切换方向。这有可能吗?

3 个答案:

答案 0 :(得分:1)

对于您不希望控件重新调整的视图,请禁用自动调整大小:[self.view setAutoresizesSubviews:NO];。这将阻止所有控件(子视图)响应界面方向更改,但选项卡仍将响应。您可能还必须设置当前视图的autoresizingMask:[self.view setAutoresizingMask:UIViewAutoresizingNone];

添加:对于您不想旋转的所有控件,请尝试以下操作

- (void)willRotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration
{
   switch (toInterfaceOrientation) {
      case UIInterfaceOrientationLandscapeLeft:
         label.transform = CGAffineTransformMakeRotation(M_PI_2); // 90 degress
         break;
      case UIInterfaceOrientationLandscapeRight:
         label.transform = CGAffineTransformMakeRotation(M_PI + M_PI_2); // 270 degrees
         break;
      case UIInterfaceOrientationPortraitUpsideDown:
         label.transform = CGAffineTransformMakeRotation(M_PI); // 180 degrees
         break;
      default:
         label.transform = CGAffineTransformMakeRotation(0.0);
         break;
   }
}

答案 1 :(得分:0)

景观的例子

[[UIDevice currentDevice] setOrientation:UIInterfaceOrientationLandscapeRight];

OR

-(BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {
    // Return YES for supported orientations
    return (interfaceOrientation == UIInterfaceOrientationLandscape);
}

答案 2 :(得分:0)

不幸的是,这并不简单。在没有内容视图控制器响应的情况下,您不能让UITabBarController响应接口更改。

但有一种方法可以做到这一点。在内容视图控制器的willAnimateRotationToInterfaceOrientation:duration:中,您可以将相反的旋转(使用transform属性)应用于您不想旋转的子视图。例如,UIInterfaceOrientationLandscapeLeft是顺时针旋转90°,因此如果对视图transform应用90°逆时针旋转,它似乎没有旋转。

如果需要,可以在UIView中包含内容视图控制器的整个界面,这样您就必须反转(并可能调整大小)一个视图。我不知道在视图控制器的主视图上应用反循环是否有效,系统可能会覆盖您对该特定视图的设置。