ios UITableViewController重叠状态栏[重复]

Posted

技术标签:

【中文标题】ios UITableViewController重叠状态栏[重复]【英文标题】:ios UITableViewController overlapping status bar [duplicate] 【发布时间】:2015-05-15 20:36:00 【问题描述】:

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

我试过搞乱edgesForExtendedLayout 和类似的设置,但没有找到神奇的组合。有谁知道如何纠正这个问题?

重现步骤:

    创建一个新的选项卡式应用程序 删除第一个标签 UIViewController 并将其替换为 UITableViewController 用一些数据填充UITableView 运行应用程序

以下是设置和问题的几个屏幕截图:

【问题讨论】:

【参考方案1】:

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

tableView.contentInset.top = 20

在Objective-C中,你不能直接赋值给顶部,所以这样做:

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

当然可以是任意值,这里是状态栏的高度。

【讨论】:

谢谢。我很惊讶这不是默认设置。 (Apple 应该检查状态栏并进行相应设置。)我选择了tableView.contentInset.top = UIApplication.sharedApplication().statusBarFrame.height,因为我不喜欢幻数:) 你是对的。 ;) 这里的原因是(从 ios 7 开始)默认情况下,视图会将其边缘扩展到全屏。如果您将视图嵌入到导航控制器中,您会看到导航栏被自动考虑在内(称为“顶部布局指南”)。 这对我来说并不是那么好用。仍然没有支持视图,所以我无法在那里设置我想要的特定颜色,无论如何滚动表格视图,内容仍然与状态内容重叠.. 我不知道怎么做,但我以前试过这个,当时它不起作用,不是很好。 设置 contentInset 不适用于我在 iOS 11. iPhone 8 中的情况。还有其他方式吗?滚动表格内容时进入状态栏下方。【参考方案2】:

根据 cmets 的建议,一种方法是(在 Swift 3 中):

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

但这并不那么干净。最好embed the UITableViewController in a UINavigationController(编辑器>嵌入>导航控制器)并取消选中检查器中的“显示导航栏”。无需调整!

【讨论】:

以上是关于ios UITableViewController重叠状态栏[重复]的主要内容,如果未能解决你的问题,请参考以下文章

IOS 教你玩转UITableViewController和TableView

iOS 15 上 UITableViewController 的便捷初始化崩溃

iOS 7 用 UIPickerView 打开 UITableViewController 很慢

UITableViewController 中的 iOS tableHeaderView 从不显示

UITabBarController中的UITableViewController = iOS 11上不需要的填充

UIViewController 内的 iOS 自定义 UITableViewController