Для тех, кто заинтересован в тиражировании, просто выполните следующие действия:
- Создать новый проект iOS
- Откройте основную раскадровку и удалите по умолчанию / начальный
UIViewController
- Вытащите новый
UITableViewController
из библиотеки объектов
- Установите его в качестве начального контроллера просмотра
- Накорми таблицу некоторыми тестовыми данными
Если вы выполните вышеуказанные шаги, при запуске приложения вы увидите, что ничто, в том числе настройка флажков Xcode на «Расширить края под полосами {Top, Bottom, Opaque}», не будет препятствовать появлению первой строки под строкой состояния, и вы не можете решить эту проблему программно.
Например , в приведенном выше сценарии, следующий не будет иметь не эффект:
// These do not work
self.edgesForExtendedLayout=UIRectEdgeNone;
self.extendedLayoutIncludesOpaqueBars=NO;
self.automaticallyAdjustsScrollViewInsets=NO;
Эта проблема может быть очень неприятной, и я считаю, что это ошибка на стороне Apple, особенно потому, что она обнаруживается в их собственных предварительно смонтированных UITableViewController
из библиотеки объектов.
Я не согласен со всеми, кто пытается решить эту проблему, используя любую форму «Магических чисел», например «использовать дельту в 20 пикселей». Этот вид тесно связанных программ определенно не то, что Apple хочет, чтобы мы делали здесь.
Я обнаружил два решения этой проблемы:
Сохранение UITableViewController
сцены :
если вы хотите сохранить UITableViewController
в раскадровке, не помещая ее вручную в другое представление, вы можете встроить ее UITableViewController
в UINavigationController
(Editor> Embed In> Navigation Controller) и снять флажок «Показывает панель навигации» в инспекторе. , Это решает проблему без необходимости дополнительной настройки, а также сохраняет вашиUITableViewController
сцену в раскадровке.
Использование AutoLayout и встраивание UITableView
в другое представление (я думаю, именно так Apple хочет, чтобы мы это делали) :
создайте пустое UIViewController
и перетащите UITableView
его в него. Затем, удерживая клавишу Ctrl, перетащите UITableView
курсор в строку состояния. Когда мышь опустится до нижней части строки состояния, вы увидите всплывающую подсказку с надписью «Top Layout Guide». Отпустите кнопку мыши и выберите «Вертикальный интервал». Это скажет системе макета разместить ее прямо под строкой состояния.
Я протестировал оба способа на пустом приложении, и они оба работают. Возможно, вам придется сделать некоторые дополнительные настройки, чтобы они работали для вашего проекта.