2015-04-10 2 views
12

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

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

+0

Я испытываю то же самое. Http://stackoverflow.com/questions/29824830/has-anything-changed-with-custom-uitableview-prototype-cells-constraints-since-i – mm24

ответ

6

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

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

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

- (void)awakeFromNib { 
    // Initialization code 

    // iOS 8.3 bug, where contentView's x position isnt aligned with self's 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]]; 
} 

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

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

+1

Не знаете, как вы обнаружили это, но я очень благодарен за это. Многие из моих карточных ящиков выглядели странно, и я понятия не имел, почему. Это фиксировало их все. Благодаря! –

+0

С удовольствием могу помочь. – Vaiden

+0

Итак, я заметил, что, хотя это, похоже, устранило эту проблему, когда я строил SDK 8.3 и работал на 8.2, когда я фактически обновляю iPad до 8.3, он сохраняется. Любые другие идеи? –

3

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

+0

Спасибо за ввод. Однако у меня не было ограничения по марже, и проблема началась с iOS 8.3. – Vaiden

0

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

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

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

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

+0

Это, должно быть, другая проблема. Проблема, о которой сообщала I (OP), была испытана пользователями, которые обновились с iOS 8.2 до 8.3, используя нашу версию приложения, скомпилированную и отправленную с XCode 6.2. – Vaiden

13

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

Окружение:

self.contentView.preservesSuperviewLayoutMargins = NO; 

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

Так вот, к примеру, где вы могли бы сделать это:

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

Это сработало отлично для меня. Просто заверните его в 'if (responsesToSelector)' check in 'awakeFromNib', и он остановил дополнительный отступ. – Stonz2

+0

Я испытываю то же самое! Не могли бы вы рассказать мне, как исправить, если я не использую раскадровку? self.tableView = UITableView (frame: CGRectMake (0, 0, self.view.frame.size.width, self.view.frame.size.height), стиль: UITableViewStyle.Plain) self.tableView! .delegate = само self.tableView .dataSource = само self.tableView .registerClass (UITableViewCell.self, forCellReuseIdentifier: "клетка")! Благодаря – webmastx

+0

Это помогло с проблемой, я имел при тестировании глюк Tableview UI в ИО 11, что не было в IOS 10. Благодаря! –

0

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

Смежные вопросы