Ios UITableViewController перекрывает строку состояния

У меня есть простая вкладка, первая вкладка которой есть UITableViewController. После заполнения некоторых данных я заметил, что верхняя часть представления таблицы перекрывает строку состояния.

Я попытался возиться с edgesForExtendedLayout и аналогичными настройками, но не нашел волшебную комбо. Кто-нибудь знает, как исправить это?

Шаги для воспроизведения:

  • Создайте новое приложение с вкладками
  • Удалите первую вкладку UIViewController и замените ее на UITableViewController
  • Заполните UITableView некоторыми данными
  • Запустите приложение

Вот несколько скриншотов настройки и проблемы: Xcode StoryboardUITableView overlapping status bar

Ответ 1

Просто измените свойство contentInset вашего представления таблицы, которое может добавить некоторые дополнения к вашему контенту. В viewDidLoad() добавьте следующее:

tableView.contentInset.top = 20

В Objective-C вы не можете напрямую назначить верх, так что сделайте так:

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

Конечно, это может быть любое произвольное значение, в этом случае это высота строки состояния.

Ответ 2

Как указано в комментариях, одним из способов является (в Swift 3):

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

Но это не так чисто. Лучше встроить UITableViewController в UINavigationController (Редактоp > Вставить в > Контроллер навигации) и снять флажок "Показывать панель навигации" в инспекторе. Нет необходимости в настройке!