Подтвердить что ты не робот

Что-то не так с iPhone 6 Plus tableView.separatorInset

Что-то происходит с нашими разделителями ячеек таблицы на iPhone 6 Plus. Я создал пустой тестовый проект с пользовательской ячейкой, содержащей только одну метку, и ограничение 15pt на передний край.

iPhone 5S

Метка и разделитель 30 px (15pt) от передней кромки. Все хорошо.

iPhone 5S

iPhone 6 Plus

Метка составляет 48 px (15pt) от передней кромки, а разделитель - 60px (20pt) от передней кромки.

iPhone 6 Plus

Если я запишу таблицу table.separatorInset, то 15pt на iPhone 5S и 20pt на 6 Plus. Установка вставки в 15 на 6 Plus вручную не работает.

Отправьте справку.

4b9b3361

Ответ 1

Переопределите метод layoutMargins в своем пользовательском классе ячеек.

 - (UIEdgeInsets)layoutMargins
{
    return UIEdgeInsetsMake(0, 15, 0, 0);
}

Ответ 2

Если вы используете раскадровку, выберите инспектор атрибутов Table View. Измените

Вставка разделителя

to

Пользовательский

и оставить левое поле по умолчанию как 15.

Ответ 3

Не идеальное решение, но это сработало для меня.

@IBOutlet weak var leftViewLeadingConstraint: NSLayoutConstraint!

override func viewWillLayoutSubviews() {
    super.viewWillLayoutSubviews()
    switch UIScreen.mainScreen().scale {
    case 2:
        leftViewLeadingConstraint.constant = 7.0
    case 3:
        leftViewLeadingConstraint.constant = 11.0
    default:
        assertionFailure("Error: wrong scale value")
    }
}

Ответ 4

I фиксировано этим решением: http://qiita.com/mono0926/items/42f7a344b39e946abfe2

Получить tableView.separatorInset.left значение при вызове viewDidLayoutSubviews.

override func viewDidLayoutSubviews() {
    super.viewDidLayoutSubviews()
    notificationLabelLeft.constant = tableView.separatorInset.left
}

Ответ 5

Просто сделайте эту опцию таблицы ложной, и она будет работать одинаково на всех устройствах, особенно на iPad.

cellLayoutMarginsFollowReadableWidth = false