我的MainWindow.xib中有一个UITabBarController。
每个选项卡都包含一个UINavigationController,它有一个UITableViewController。
当我按下UITableViewController中的按钮时,我想将视图控制器水平方向推到导航堆栈上。
我在UITableViewController
中覆盖了以下内容- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {
// Return YES for supported orientations.
return YES;
}
但推出的视图控制器不会以水平方向显示(在XIB中它被定义为横向)。
如何将其推向水平方向?
答案 0 :(得分:1)
UITabBarController
和UINavigationController
的自动调整受到一些限制:
对于UITabBarController,只有当标签栏中的所有控制器都支持自动旋转时,自动旋转才有效;
对于UINavigationController,仅当UINavigationController中的rootViewController支持自动旋转时,自动旋转才有效。
一旦确定满足此条件,那么您可以尝试按下UITableViewController定义其shouldAutorotateToInterfaceOrientation,如下所示:
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {
return (interfaceOrientation == UIInterfaceOrientationLanscape);
}
编辑:
所有UIViewControllers都应该具有shouldAutorotateToInterfaceOrientation
的定义:
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {
return YES;
}
除了你想要强制横向的那个,它应该具有上面给出的定义。
另请查看this thread中的最后一篇文章,以便为UITabBarController正确实现shouldAutorotateToInterfaceOrientation。
答案 1 :(得分:0)
您需要在viewWillAppear方法中更改状态栏方向,并在viewWillDisappear等中恢复,并且在方法中仅返回横向方向
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {
// Return YES for supported orientations.
return (UIInterfaceOrientationLandscapeRight or UIInterfaceOrientationLandscapeLeft);
}
答案 2 :(得分:0)
你的方法似乎合乎逻辑。但是,您是否在想要仅为横向的推送视图控制器中尝试此操作:
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
{
return (interfaceOrientation == UIInterfaceOrientationLandscapeLeft ||
interfaceOrientation == UIInterfaceOrientationLandscapeRight);
}
此方法的想法是为您支持视图控制器的方向返回YES。