iOS的UITableViewController与状态栏重叠问题

16

我有一个简单的选项卡应用程序,其第一个选项卡是一个UITableViewController。在填充一些数据后,我注意到表视图的顶部与状态栏重叠。

我尝试过调整edgesForExtendedLayout和类似的设置,但没有找到正确的组合。是否有人知道如何纠正这个问题?

复现步骤:

  1. 创建一个新的选项卡应用
  2. 删除第一个选项卡UIViewController并替换为UITableViewController
  3. 使用一些数据填充UITableView
  4. 运行应用程序

以下是设置和问题的几个截屏: Xcode Storyboard UITableView overlapping status bar

2个回答

31

只需修改您的表视图的 contentInset 属性,即可在内容周围添加一些填充。在 viewDidLoad() 中添加以下代码:

只需要修改表格视图的 contentInset 属性,就可以为您的内容周围添加一些填充。在 viewDidLoad() 中添加以下代码:

tableView.contentInset.top = 20

在Objective-C中,你不能直接对顶部进行分配,所以要这样做:

self.tableView.contentInset = UIEdgeInsetsMake(20, 0, 0, 0);

当然它可以是任意值,在这种情况下,它是状态栏的高度。


19
谢谢。我很惊讶这不是默认设置。(苹果应该检查状态栏并相应地进行设置。) 我使用了 tableView.contentInset.top = UIApplication.sharedApplication().statusBarFrame.height,因为我不喜欢神奇数字 :) - Albert Bori
关于这一点,你是正确的 ;) 嗯,原因在于(自iOS 7以来),视图默认情况下会将其边缘扩展到整个屏幕。如果您将视图嵌入导航控制器中,您会发现导航栏会被自动考虑进去(称为“顶部布局指南”)。 - József Vesza
1
这对我来说并不是很有效。仍然没有支持视图,因此我无法在那里设置特定的颜色,而且无论如何滚动tableview,内容仍会重叠状态内容.. - stonemonk
1
我不知道怎么做,但之前我尝试过,那时它没有工作,现在却工作得很好。 - Mihir Oza
1
在iOS 11上,设置contentInset对我的情况没有起作用。iPhone 8。还有其他方法吗?当滚动表格内容时,会出现内容进入状态栏的情况。 - karim
显示剩余2条评论

4

如评论中所建议的,一种方法是在Swift 3中:

override func viewDidLoad() {
    super.viewDidLoad()
    tableView.contentInset.top = UIApplication.shared.statusBarFrame.height
}

但不够简洁。更好的方式是将UITableViewController嵌入UINavigationController中(Editor > Embed In > Navigation Controller),并在检查器中取消选中“显示导航栏”。不需要调整任何内容!


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接