IOS 8.3 - ячейка UITableView не выровнена, отступ слева

Я наткнулся на странное поведение, когда ячейки, добавленные к UITableView, иногда отступали слева. Это происходит только в iOS 8.3, и я не могу найти четкую картину того, когда это произойдет.

Кто-нибудь испытывает то же самое?

Ответ 1

Ну, это странно...

Кажется, что иногда UITableViewCellContentView contentView не выравнивается с самим UITableViewCellContentView. Это происходит, когда UITableView сам по себе является частью макета шире экрана (как в случае горизонтального пейджера).

К счастью, решение прост: добавьте ограничение для выравнивания contentView со своим родителем. Это можно сделать только программно, так как вы не можете редактировать ограничения contentView в редакторе макетов.

- (void)awakeFromNib {
    // Initialization code

    // iOS 8.3 bug, where contentView x position isnt aligned with self x position...
    // So we add a constraint to do the obvious...
    [self addConstraint:[NSLayoutConstraint constraintWithItem:self.contentView attribute:NSLayoutAttributeLeading relatedBy:NSLayoutRelationEqual toItem:self attribute:NSLayoutAttributeLeading multiplier:1.0f constant:0.0f]];
}

Это только началось в iOS 8.3, но исправление кажется безопасным и обратно совместимым с более ранними версиями.

Как всегда - прокомментируйте свой опыт.

Ответ 2

Мой tableViewCells видел увеличенные поля слева и справа при запуске на iOS 8.3, которые я не видел в предыдущих версиях.

Установка:

    self.contentView.preservesSuperviewLayoutMargins = NO;

исправил мою проблему и сохранил мои поля на всех версиях, но помните, что это доступно только на iOS 8 +.

Итак, вот, например, вы можете сделать это:

- (void)awakeFromNib {
    if ([self.contentView respondsToSelector:@selector(setPreservesSuperviewLayoutMargins:)]) {
        self.contentView.preservesSuperviewLayoutMargins = NO;
    }
}

Ответ 3

Похоже, это из-за свойства layoutMargins. Я отключил мое ограничение во втором элементе "Относительно поля", и все отлично поработало. Вот статья .

Ответ 4

Я видел вариацию этой проблемы с приложением, над которым я работаю. Мы видим некоторые ячейки таблицы с неправильным выравниванием вершин/трейлингов.

Он не подключен к iOS 8.3, он возникает только при создании с Xcode 6.3. Я могу взять тот же проект и построить его на Xcode 6.2, и этого не происходит.

После некоторого исследования выясняется, что это происходит только на ячейках таблицы в xibs.

Обходной путь заключается в том, чтобы удалить ограничение на начало/конец на поля и установить их непосредственно в супервизор (т.е. представление содержимого ячейки).

Ответ 5

Это исправлено для меня. Я просто прекратил использовать UITableViewCell imageView и textLabel свойства, подключенные к моим выходам.