如何让iOS7 UITableViewController不显示在顶部状态栏下?

Tra*_*ggs 33 layout objective-c uitableview ios ios7

我的根控制器是一个TabBarController(选项卡式应用程序).其中一个选项卡是UITableViewController.当我切换到那个并滚动项目时,它们会显示在顶部的状态栏下(信号,电池等).我不希望这样.我希望那是不透明的......或者某种东西.它的视觉震撼与表格单元格的文本重叠状态的东西.

我可以通过一些我不理解的属性设置从故事板中解决这个问题吗?或者我需要在子类中添加一些方法吗?或者我可能需要用其他类型的控制器包装我的UITableViewController?

我在Storyboard属性页面中尝试了ViewController Layout和Extend Edges设置的多种变体,但它们似乎都没有更好地改变它.

更新:我认为我的问题与iOS 7非常相似:UITableView显示在状态栏下.唯一的区别是,我嵌入了TabBarController,这种情况是根视图.我想在一个嵌入其中列出的解决方案NavigationController,并设置Show Navigation BarFalse,但它并没有任何区别.

屏幕截图:

我的故事板(收缩)显示一个标签式控制器,有2个孩子,一个单一视图,另一个是表格视图.

故事板

标签栏控制器的设置

标签栏控制器设置

表视图控制器的设置

表视图控制器设置

该应用最终看起来像在我的手机上

在此输入图像描述

故事结局如何

尽管下面有很多答案,但它们都没有真正奏效.某种程度的,但不是真的.我也尝试了Embed in NavigationController方法,这也有问题.虽然做了什么,是这样的:

  1. 添加UIViewController
  2. 设置子控制器与它的关系和标签栏控制器(就像我已经拥有的其他两个)
  3. 将TableView(非控制器)添加到新的UIViewController,根据需要定位,它将捕捉到状态栏的底部
  4. 设置TableView delegatetableSource新控制器
  5. 创建自定义UIViewController子类并更新故事板中控制器的类类型
  6. 将与表相关的方法从我的自定义UITableViewController子类复制到我的新子类
  7. 从原始选择我的原型表格单元格,然后命令+将其拖动到新的表格视图
  8. 很高兴删除原来的TableViewController(和包装器NavigationController)
  9. 更新标签栏项以匹配前一个
  10. 又扼杀了另一个"你正在努力"

Jus*_*der 33

在viewDidLoad中试试这个:

self.tableView.contentInset = UIEdgeInsetsMake(20, 0, 0, 0);
Run Code Online (Sandbox Code Playgroud)

20 px是状态栏的高度.如果您有导航栏使用64而不是20


Flo*_*ian 15

万一有人还在读这个帖子:

对我有用的是取消选中父标签栏控制器中的"扩展边缘"选项.这在iOS7和iOS6中提供了一致的行为.


小智 5

使用SWRevealController时我遇到了同样的问题.

使用上面和下面的评论,我可以把它放在工作中

-(void)viewWillAppear instead of ViewDidLoad
     self.tableView.contentInset = UIEdgeInsetsMake(20, 0, 0, 0);
Run Code Online (Sandbox Code Playgroud)


Tra*_*ggs 2

如果有人错过了(现在很长)问题末尾的故事如何结束部分,简短的答案是:如果您想实现既定目标,请使用带有 TableView 的简单 UIViewController ,而不是 TableViewController 。

  • 因此在这种情况下使用静态单元是不可能的。 (9认同)