Почему для UITableView для ячейки separatorInset по умолчанию установлено значение 15, а для корневого поля представления контроллера поля "Границы макета" - 16?

На iPhone 6s, когда я устанавливаю линию разделения ячеек слева на 14, это шоу 15, я думаю, это потому, что он установлен preservesSuperviewLayoutMargins = true по умолчанию.

Но из Apple doc: "Боковые поля варьируются в зависимости от того, как и где представлен контроллер, но могут составлять 16 или 20 баллов (в зависимости от устройства). Вы не можете изменять эти поля".

Когда я добавляю вид сбоку от корневого вида с помощью автоматического макета, и устанавливаю preservesSuperviewLayoutMargins = trueна iPhone 6s расстояние от края корневого представления до добавленного представления равно 16, поэтому оно не выровнено по левому краю представления таблицы. Как можно использовать UITableViewCell preservesSuperviewLayoutMargins = true, а боковые поля 15, а не 16?

1 ответ

После некоторых логов я знаю почему, потому что:

tableView.preservesSuperviewLayoutMargins = false

А расположение макетов таблицы View (8, 15, 8, 15) на iPhone 6; (8, 20, 8, 20) на iPhone 6 Plus.

На яблочных документах говорится только: "Поля по умолчанию составляют 8 точек на каждой стороне. Вы можете изменять эти поля в зависимости от потребностей вашего приложения".

Но расположение таблицы представления Margins (8,8,8,8) на viewDidLoad(), а затем перейдите на (8, 15, 8, 15) на iPhone 6.

Это очень сбивает с толку, когда я хочу добавить выравнивание по левому виду представления таблицы, а левое ребро подпредставления по левому краю выравнивания по линии разделителя представления таблицы. Мне пришлось обновить вид, как это:

override func viewDidLayoutSubviews() {
    super.viewDidLayoutSubviews()
    totalBar.preservesSuperviewLayoutMargins = tView.preservesSuperviewLayoutMargins
    totalBar.layoutMargins = tView.layoutMargins
}

Так что мне не нужно жестко кодировать значения полей для 6 и 6 Plus, и даже для Apple, изменить значение в будущем.

Другие вопросы по тегам