在iOS 7中,为什么UITableView的contentInset具有底部值,尽管隐藏了UITabBarController?

时间:2013-12-23 05:51:03

标签: ios iphone uitableview ios7 uitabbarcontroller

我不知道为什么 UITableView 会自动触底,尽管我之前通过调用[setHidden:YES]隐藏了 UITabBarController

拥有 UITableView 的视图控制器是 UITabBarController 的子级。我已经知道 automaticAdjustsScrollViewInsets 可以帮助任何 UIScrollView 获取正确的'contentInset',具体取决于它的容器视图控制器的状态。

所以,如果 UITabBar 被隐藏,我预计 UITableView 的底部contentInset将为0。但是,不这样做。

虽然 automaticAdjustsScrollViewInsets 为YES,但是当隐藏 UITabBar 时,我应该手动调整该值吗?

2 个答案:

答案 0 :(得分:0)

标签栏从来没有被隐藏 - 毕竟为什么要有一个UITabBarController,如果你想隐藏标签栏。在文档中,警告您不要直接修改选项卡栏对象:

  

您永远不应该尝试操纵UITabBar对象本身   存储在此属性中。

这正是您在将其设置为隐藏时所做的工作。

在iOS6中,这已经奏效了,但现在在iOS7中却没有。并且它似乎很容易隐藏它。当你最终设法隐藏它时,如果应用程序进入后台并返回,Apple的布局逻辑将覆盖您的更改。有很多这样的诱因。

我的建议是改变你的设计。也许以模态方式显示数据。

答案 1 :(得分:0)

将此文件放在任何为嵌套视图控制器出现此问题的人处。

我的视图控制器包含层次结构是:

UINavigationController
  |--UIViewController
     |--UITabBarController
        |--UIViewController

最后一个视图控制器有一个UITableView scrollIndicatorInsets被标签栏控制器的UITabBar高度保持偏移,即使它被隐藏

解决方案:在包含标签栏控制器的视图控制器中将automaticallyAdjustsScrollViewInsets设置为false(位于UINavigationController内)。无需在选项卡栏控制器本身和UITableView所在的第二个视图控制器中设置其他属性。