我遇到了UITabBarController的一个真正问题。 我追求的结果如下: 1)在纵向模式下,一个简单的基于标签栏的应用程序(带导航栏)没什么太花哨的。 2)在横向模式下,我想使用我自己的UIViewController完全忽略UITabBar。
方法(我尝试了很多变种)我最后尝试过但我不明白为什么不“工作”如下:
[TBC.view removeFromSuperView]; [AA.view addSubview:LSC.view];
当回到肖像时反转它。
[LSC.view removeFromSuperView]; [AA.view addSubview:TBC.view];
我遇到的问题(好吧,它简单地错误地旋转创建一个真正混乱的界面)是完全无法解释的。似乎tabbarcontroller视图根本不“喜欢”在标准视图中,而是希望直接附加到屏幕上。 我想知道实现目标的最佳方法是什么,以及为什么tabbar不喜欢成为视图的子视图,
任何提示大多赞赏。
-t
答案 0 :(得分:3)
万一你仍然需要答案,或者其他人偶然发现这个问题,我已经做了同样的事情并且让它发挥作用,但是你必须跳过几个箍。要旋转UITabBarController的视图,您需要做四件事:
我有一个RootRotationController来执行此操作,如下所示:
@implementation RootRotationController
#define degreesToRadian(x) (M_PI * (x) / 180.0)
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {
if ((UIInterfaceOrientationPortrait == interfaceOrientation) || (UIInterfaceOrientationPortraitUpsideDown == interfaceOrientation)) {
[[UIApplication sharedApplication] setStatusBarHidden:YES animated:NO];
}
// Return YES for supported orientations
return YES;
}
- (void)willAnimateRotationToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation duration:(NSTimeInterval)duration {
[super willAnimateRotationToInterfaceOrientation:interfaceOrientation duration:duration];
if (UIInterfaceOrientationLandscapeLeft == interfaceOrientation) {
self.view = self.landscape.view;
self.view.transform = CGAffineTransformIdentity;
self.view.transform = CGAffineTransformMakeRotation(degreesToRadian(-90));
self.view.bounds = CGRectMake(0, 0, 480, 300);
} else if (UIInterfaceOrientationLandscapeRight == interfaceOrientation) {
self.view = self.landscape.view;
self.view.transform = CGAffineTransformIdentity;
self.view.transform = CGAffineTransformMakeRotation(degreesToRadian(90));
self.view.bounds = CGRectMake(0, 0, 480, 300);
} else if (UIInterfaceOrientationPortrait == interfaceOrientation) {
mainInterface.view.transform = CGAffineTransformIdentity;
mainInterface.view.transform = CGAffineTransformMakeRotation(degreesToRadian(0));
mainInterface.view.bounds = CGRectMake(0, 0, 300, 480);
[[UIApplication sharedApplication] setStatusBarHidden:NO animated:NO];
self.view = mainInterface.view;
} else if (UIInterfaceOrientationPortraitUpsideDown == interfaceOrientation) {
mainInterface.view.transform = CGAffineTransformIdentity;
mainInterface.view.transform = CGAffineTransformMakeRotation(degreesToRadian(180));
mainInterface.view.bounds = CGRectMake(0, 0, 300,480);
[[UIApplication sharedApplication] setStatusBarHidden:NO animated:NO];
self.view = mainInterface.view;
}
}
此外,您应该知道在将根控制器的视图添加到窗口后调用shouldAutorotateToInterfaceOrientation,因此您必须在应用程序委托中完成后重新启用状态栏。
答案 1 :(得分:1)
查看文档中的UIViewController
实例方法rotatingFooterView
。
或者,您可以自己管理TabBar,而不是通过UITabBarController
。
答案 2 :(得分:1)
我认为你的问题来自错字。将removeFromSuperView更改为removeFromSuperview。 虽然,它仍然有问题。标签栏无法正常旋转。它向上移动直到它消失。
如何不移除标签栏并使其透明。