Как сделать UITableViewCell с пользовательским стилем, вставленным из безопасной области экрана устройства, когда он является частью иерархии представления UINavigationController > UIViewController > UIView > UITableView > UITableViewCell
? Моя левая сторона UITableViewCell обрезается на выемке камеры.
Установка iOS 11 [contentInsetAdjustmentBehavior
] 1 и insetsContentViewsToSafeArea
не работает, когда у меня есть комбинация обоих пользовательских макетов UITableViewCell (не один базовых / подробных стилей представления) и использую UITableViewCell в представлении, которое само находится внутри UINavigationController. И эти значения должны по умолчанию ДА.
Я также пытался установить preservesSuperviewLayoutMargins
, который по умолчанию имеет значение NO.
Пара вариантов поведения
- Установка иерархии вида как
UIViewController > UIView > UITableView > UITableViewCell. UIViewController
является точкой входа в раскадровку. (ниже) - Пользовательский UITableViewCell правильно вставлен из горизонтальной безопасной области, как обычно.
Установка иерархии представления как 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, но ячейка не может быть правильно вставлена с безопасной областью как видно на симуляторе обрезки внизу.
- Мои ограничения макета для пользовательского UITableViewCell показаны ниже. Как видно, Interface Builder имитирует правильную вставку, но фактическая работа симулятора не вставляет ячейку.
Иерархии представлений в # 2 и # 3 одинаковы, единственное отличие состоит в использовании пользовательского макета UITableViewCell по сравнению с базовый / подробный стиль по умолчанию.
Я попытался установить preservesSuperviewLayoutMargins = YES
для каждого представления в иерархии, и нет никакой разницы для вставки пользовательского UITableViewCell. Я сделал простой тестовый проект , скачайте здесь , демонстрируя проблему вставки между ячейками по умолчанию Basi c и ячейками нестандартного стиля в описанной иерархии представлений.
Я не могу быть единственным, кто тестирует пользовательский UITableViewCell на ландшафте iPhone X / 11. Как я могу получить правильную вставку содержимого ячейки таблицы из безопасной области устройства? Спасибо.