UITableViewController и безопасная область

0

Я использую подклассUITableViewController чтобы поддержать мой очень простой контроллер табличного представления. Вот так:

Изображение 72008 Изображение 72009 Изображение 72010

class FriendsViewController: UITableViewController {


    override func viewDidLoad() {
        super.viewDidLoad()

        tableView.insetsContentViewsToSafeArea = true

    }
}

Однако вид таблицы охватывает безопасную безопасную зону. Это особенно очевидно при предварительном просмотре на эмуляторе iPhone X.

Изображение 72011

Я ожидал увидеть что-то вроде этого:

Изображение 72012

Я пробовал использоватьtableView.insetsContentViewsToSafeArea , согласно моему фрагменту кода выше, но он не выполняет то, что указано в документации Apple:

When the value of this property is true (the default), the table view adjusts the insets of the content view within each of its cells, headers, and footers on the leading and trailing sides to make the content fit within the safe area.

Я знаю альтернативные решения безUITableViewController , но я специально хочу его использовать (это очень удобно) и ожидаю, что смогу настроить его так, чтобы он вел себя должным образом и наблюдал за безопасной зоной. Было бы не поверить, что Apple разработала сломанный компонент.

В любом случае, ни один из постов с подобными вопросами не помог, так что надеюсь на новый старт.

Теги:
uitableview tableview
CodeFix

1 ответ

1
Лучший ответ

То, что вы видите, нормально и правильно. Табличное представление - это полный вид контроллера представления, охватывающий весь экран. Он по-прежнему отлично работает, потому что прокручиваемое содержимое вставлено, поэтому пользователь может прокручивать, чтобы увидеть все части таблицы; верх таблицы вставлен вниз. Так что все хорошо.

Если вам действительно нужен эффект, показанный на вашем последнем снимке экрана, вам придется сделать контроллер табличного представления дочерним контроллером представления какого-либо другого контроллера представления. Типичный интерфейс заключается в том, чтобы обернуть контроллер табличного представления в контроллер навигации так, чтобы панель навигации заполняла верхнюю часть экрана. Или вы можете вручную использовать представление контейнера / встраивать переход.

Поделиться
Источник
  • 0
    Спасибо за ответ. Нет, на самом деле не хочу изменять какое-либо поведение UITableViewController по умолчанию, если оно правильно с точки зрения безопасности. Более того, у меня наконец-то хватило ума проверить пример на официальном сайте Apple, и таблица действительно проходит до самого низа экрана под индикатором главного экрана (короткая черная линия): developer.apple.com/documentation/uikit/ views_and_controls /… Но я все равно не понимаю. Я думал, что весь смысл безопасной зоны в том, чтобы там ничего не появлялось - разве нет?
  • 0
    Не «ничего». Subviews. Но ваше табличное представление не является второстепенным. Все, что я могу предложить, это перечитать мой ответ. Представление контроллера представления, если это не дочерний контроллер представления, всегда занимает весь экран. И это то, что вы получили, когда решили использовать не дочерний контроллер табличного представления. Я рассказал вам два распространенных способа сделать его ребенком. По сути, сейчас я повторил весь свой ответ как комментарий.
  • 0
    Я понял пункты о встраивании или размещении в контроллере навигации. И, как я уже сказал, на самом деле не хочу изменять макет по умолчанию, поскольку мы установили, что он не нарушает ограничения безопасной области. Я не понимаю, почему табличное представление (или любое другое «базовое» представление контроллера представления, которое занимает весь экран), входящее в безопасную область внизу экрана, считается нормальным. Я полагаю, это связано с тем, что iOS «знает», как разместить его так, что он не покрывает основные элементы управления, такие как домашний экран или индикаторы времени / сигнала. Т.е. под тем контролем.
  • 0
    Я должен сказать это в третий раз? Представление контроллера полноэкранного представления занимает весь экран. Вот что у вас есть. Табличное представление не является подвидом. Это ВЗГЛЯД.

Другие вопросы

  • Как выполнить переход при нажатии на UIViewTableCell?2 ответ

    как мне выполнить переход, когда я нажимаю UITableViewCell, у меня уже есть переход в раскадровке, переходящий от UITableView к следующему контроллеру представления? Мне сказали использовать функцию didSelectRowAt, но я не могу заставить ее работать! Контроллер представления, к которому я пытаюсь по...

  • Приложение SwiftUI с основным местоположением и основными данными1 ответ

    Я работаю над приложением, которое отслеживает местоположение пользователя и сохраняет некоторые данные, связанные с местоположением, в CoreData. Я новичок в SwiftUI, поэтому мой вопрос связан с тем, где и как лучше всего в приложении сохранять данные о местоположении в CoreData. В настоящее время у...

  • Проблемы UIContextMenu и UITableView1 ответ

    Я пытаюсь добавить аналогичное UIContextMenu, которое вы можете найти в iMessages. При длительном нажатии на сообщение должно отображаться контекстное меню с некоторыми параметрами. Я использую tableView (_: contextMenuConfigurationForRowAt: point :) и другие методы. Все идет нормально. Но у меня во...

  • Как установить TextField в InputAccessoryView в качестве первого респондента [Swift]2 ответ

    Хорошо, у меня есть tableView с textField, где, когда пользователь нажимает на textField в tableView, на клавиатуре появляется настраиваемый InputAccessoryView. Это выглядит так: [IMG_OUR_ID=32214.png] А вот код для создания настраиваемого InputAccessoryView, который я пробовал в cellForRowAt и в te...

  • Идентификатор ячейки не найден при запуске приложения1 ответ

    Я давно работаю с UITables и недавно обновился с Xcode 11.7 до Xcode 12. Я создал новую таблицу и поместил в нее прототип ячейки с идентификатором «cellAutocomplete», но при попытке удалить ячейку в «cellForRowAt» я получаю сообщение об ошибке: ** Завершение работы приложения из-за неперехваченного ...

  • Попытка выполнить поиск с помощью MKLocalSearch в отображении результатов с помощью UISearchController1 ответ

    Я новичок в Swift и пытаюсь создать приложение для перечисления мест, которые стоит посетить. Я хочу включить поиск по карте с помощью MapKit. Я был зациклен на этом уроке, даже если он немного староват. Вот мой контроллер представления "LocationSearchTable"import MapKit class LocationSea...

  • Показать данные API из окна консоли в UITableView (справа)2 ответ

    Я создаю это "погодное приложение" Я новичок в Swift и еще меньше знаю об API. Думаю, мне удалось получить некоторые данные из [1]: https://api.met.no/weatherapi/locationforecast/2.0/documentation%23!/data/get_compact#!/data/get_compact_format API, но это отображается в окне консоли, в то ...

  • Swift TableViewCell Custome didSelect2 ответ

    У меня есть заказTableViewCell . При нажатии на него должен появитьсяcornerRadius + белый фон с.alpha(0.7) . Сейчас это просто значение по умолчаниюgrey что выглядит так: [IMG_OUR_ID=49772.jpg] Я пробовал установитьcornerRadius а такжеbackgroundColor вsetSelected() внутри моегоCustomCell но это ниче...

  • Swift: как повторно использовать пользовательский вид, загруженный из Nib1 ответ

    В моем приложении есть настраиваемая ячейка, и я хочу повторно использовать ее в других местах. Однако это не было бы вUITableView а скорее вUIScrollView просмотр содержимого. Учитывая, что это можно использовать таким образом, проблема, с которой я столкнулся, заключается в том, как загрузить из Ni...

  • Как обновить индикатор выполнения в ячейках UITableView, если они еще не видны1 ответ

    Я столкнулся с проблемой: у меня есть табличное представление, в котором я отображаю список файлов пользователя в облачном хранилище. Я успешно реализовал загрузку этих файлов на устройство, нажав на кнопку, расположенную на ячейке. После щелчка по ней в ячейке появляется индикатор выполнения, отобр...

CodeFix
Цитата дня

"Завидую тестировщикам: все хотят с ними дружить."

Эндрю Таненбаум