保持横向模式的控制,但允许uitabbar切换

我有一个UITabBar开关的位置,当iphone改变方向和工作正常,但我希望在第一个标签的视图内的控件保持静态,无论手机的位置。 我觉得我失去了一些明显的东西?

编辑:基本上,控件总是风景,但标签栏必须切换方向。 这可能吗?

对于您不希望控件重新调整的视图,请禁用自动调整: [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; } } 

风景的例子

 [[UIDevice currentDevice] setOrientation:UIInterfaceOrientationLandscapeRight]; 

要么

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

不幸的是,这不是直截了当的。 您不能让UITabBarController响应接口更改,同时没有内容视图控制器响应。

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

如果你愿意的话,你可以在UIView中包含内容视图控制器的整个界面,所以你只需要反转(也可能resize)一个视图。 我不知道是否会在视图控制器的主视图上应用反旋,系统可能会覆盖您对该特定视图的设置。