Как сделать собственный стиль UITableViewCell вставкой из безопасной области? - PullRequest
1 голос
/ 29 марта 2020

Как сделать UITableViewCell с пользовательским стилем, вставленным из безопасной области экрана устройства, когда он является частью иерархии представления UINavigationController > UIViewController > UIView > UITableView > UITableViewCell? Моя левая сторона UITableViewCell обрезается на выемке камеры.

Установка iOS 11 [contentInsetAdjustmentBehavior] 1 и insetsContentViewsToSafeArea не работает, когда у меня есть комбинация обоих пользовательских макетов UITableViewCell (не один базовых / подробных стилей представления) и использую UITableViewCell в представлении, которое само находится внутри UINavigationController. И эти значения должны по умолчанию ДА.

Я также пытался установить preservesSuperviewLayoutMargins, который по умолчанию имеет значение NO.

Пара вариантов поведения

  1. Установка иерархии вида как UIViewController > UIView > UITableView > UITableViewCell. UIViewController является точкой входа в раскадровку. (ниже)
    • Пользовательский UITableViewCell правильно вставлен из горизонтальной безопасной области, как обычно.

setup1

Установка иерархии представления как UINavigationController > UIViewController > UIView > UITableView > UITableViewCell. UINavigationController - это точка входа раскадровки с UIViewController в качестве контроллера вида root для контроллера навигации.

  • Только UITableView требует preservesSuperviewLayoutMargins = YES для вставки базового / подробного стиля UITableViewCell из безопасной области.

Установка иерархии представления в виде UINavigationController > UIViewController > UIView > UITableView > UITableViewCell. UINavigationController - это точка входа раскадровки с UIViewController в качестве контроллера вида root для контроллера навигации.

  • Невозможно вставить стиль UITableViewCell по умолчанию из безопасной области.
  • На приведенном ниже снимке экрана UITableView.preservesSuperviewLayoutMargins = YES с пользовательским макетом UITableViewCell, но ячейка не может быть правильно вставлена ​​с безопасной областью как видно на симуляторе обрезки внизу.

setup#3

  • Мои ограничения макета для пользовательского UITableViewCell показаны ниже. Как видно, Interface Builder имитирует правильную вставку, но фактическая работа симулятора не вставляет ячейку.

custom constraints

Иерархии представлений в # 2 и # 3 одинаковы, единственное отличие состоит в использовании пользовательского макета UITableViewCell по сравнению с базовый / подробный стиль по умолчанию.

Я попытался установить preservesSuperviewLayoutMargins = YES для каждого представления в иерархии, и нет никакой разницы для вставки пользовательского UITableViewCell. Я сделал простой тестовый проект , скачайте здесь , демонстрируя проблему вставки между ячейками по умолчанию Basi c и ячейками нестандартного стиля в описанной иерархии представлений.

Я не могу быть единственным, кто тестирует пользовательский UITableViewCell на ландшафте iPhone X / 11. Как я могу получить правильную вставку содержимого ячейки таблицы из безопасной области устройства? Спасибо.

...