我在移动到横向视图时遇到了隐藏UITabBar的问题。 当我在Xcode 4.6.1和iOS 6.1模拟器中运行我的应用程序时,一切正常,但在Xcode 5和iOS 7模拟器中运行应用程序时,我面临以下问题。
我正在使用tabBarController,屏幕底部有3个标签。 其中一个选项卡具有从纵向视图切换到横向视图的功能。 我们需要在纵向视图中显示tabBars,但需要在横向视图中隐藏它们。 将模拟器从纵向视图切换到横向视图时,tabBar会被隐藏,但我看到底部有一个空白区域。 确认空格是由Tabbar引起的,因为我将tabBar的隐藏属性更改为NO
(self.tabBarController.tabBar.hidden = No;)
我可以在横向视图中看到前面有空白区域的tabBars。
我正在分享shouldAutorotateToInterfaceOrientation的代码,我正在创建横向视图。 我试图使用[UIScreen mainScreen] .bounds.size.width而不是self.tabBarController.view.bounds.size.width。 我也试过hardCoding宽度值,但帧的宽度没有变化。
还有一件事要清楚,如果有人怀疑我们为什么要从超级视图中移除景观视图,将其设为零,然后再重新绘制它。 这是必需的,因为我们的应用程序显示工作日 - 周一,周二,周三和应用程序也支持更改为不同的语言。
因此,当用户选择其他语言时,我们需要以相应的语言显示这些工作日标签,因此我们必须删除该视图,然后再重新绘制,因为UILabes不会自动刷新。
我已阅读有关此问题的一些帖子,但无法找出实际原因。如果有人有任何想法,请建议解决方案。
首先,我在viewDidLoad()中创建一个横向视图,如下所示 -
_landscapeView = [[MyWeekView alloc]initWithFrame:CGRectMake(0, 0, self.tabBarController.view.bounds.size.height, 320)];
[self.view addSubview:_landscapeView];
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
{
if (interfaceOrientation == UIInterfaceOrientationLandscapeLeft || interfaceOrientation == UIInterfaceOrientationLandscapeRight) {
displayEmpName.frame = CGRectMake(0, 22.0, self.tabBarController.view.bounds.size.width, 34.0);
_portraitView.hidden = YES;
_landscapeView.hidden = NO;
self.tabBarController.tabBar.hidden = YES;
self.navigationController.navigationBar.hidden = YES;
[[self.tabBarController.view.subviews objectAtIndex:0]setFrame:CGRectMake(0, 0, 480,320)];
dayView.hidden = YES;
[self.view bringSubviewToFront:_landscapeView];
self.navigationItem.leftBarButtonItem = nil;
//LABELS IN SCREEN DO NOT CHANGE ON CHANGING LANGUAGE
//RELOAD THE LANDSCAPE VIEW ONCE DEVICE IS CHANGED TO LANDSCAPE MODE
[_landscapeView removeFromSuperview];
_landscapeView = nil;
_landscapeView = [[MyWeekView alloc]initWithFrame:CGRectMake(0, 0, self.tabBarController.view.bounds.size.width, 320)];
[self.view addSubview:_landscapeView];
}