如何隐藏iOS标签栏并填充它留下的空间

时间:2014-12-13 08:17:55

标签: ios objective-c uiwebview uitabbarcontroller

我在使用隐藏UITabBar时留下的空间时遇到了麻烦。

我有一个带UINavigationController的UITabBarController,其根视图控制器只有一个UIWebView。当我隐藏导航/状态栏时,我正在使用自动布局约束来使webview填充视图,该视图工作正常(并填充可用空间)。

但是,当我隐藏标签栏(使用setNavigationBarHidden)时,标签栏会被隐藏,但它腾出的空间不会像预期的那样被webview用尽。

搜索类似问题建议在推送视图之前使用hidesBottomBarWhenPushed。我不想在旋转设备时推送另一个VC(或必须重新加载webview)。其他人建议调整框架的大小(如https://stackoverflow.com/a/1554637/1429412),但我无法成功完成。

在一个方向上隐藏标签栏的最佳方法是什么,而不是另一个方向,并且有一个视图填充标签栏腾出的空间?

纵向截图,按预期显示状态/导航栏和标签栏后面带有绿色背景的UIWebview:http://i.stack.imgur.com/Hzj9k.png

横向屏幕截图显示隐藏状态/导航栏和标签栏。 webview内容已扩展到顶部(导航栏),但未扩展到底部(选项卡栏)。但是,webview本身(唯一具有绿色背景的元素)已向下扩展而不是其内容(无论长度如何):http://i.stack.imgur.com/sdk75.png

如果我在运行时检查视图(使用FLEX),然后单击可查看的内容区域,则会显示UIWeBrowserView视图,其高度为271。单击标签栏空间所在的区域显示_UIWebViewScrollView,高度为320。在代码中,我可以看到UIWebView的.contentSize仅为568x271。我尝试了在webview及其子视图上设置框架的各种组合,但没有成功。

现在,没有任何框架调整黑客攻击,代码就是:

- (void)willRotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration {
    [[self navigationController] setNavigationBarHidden:UIInterfaceOrientationIsLandscape(toInterfaceOrientation) animated:YES];
    [[UIApplication sharedApplication] setStatusBarHidden:UIInterfaceOrientationIsLandscape(toInterfaceOrientation) withAnimation:UIStatusBarAnimationSlide];
    self.tabBarController.tabBar.hidden = UIInterfaceOrientationIsLandscape(toInterfaceOrientation);
}

我正在将xCode 6.1用于iOS7 +项目。

接下来我该怎么办?提前感谢任何指针!

1 个答案:

答案 0 :(得分:0)

这就是Tabbars假设工作的方式,UIView唯一可以覆盖标签bors的形式是模态视图presentviewcontroller .... dismissviewcontroller Apple有很多样本只是搜索它。