Почему UITableView игнорирует separatorColor для дополнительных разделителей с пользовательским separatorInset?

Если я установлю красный separatorColor в представлении таблицы в iOS 7, а также установлю separatorInset на UIEdgeInsetsZero или любое другое пользовательское значение вставки, все дополнительные или «лишние» строки будут иметь цветные разделители по умолчанию. Как я могу это исправить?

Последнее предложение документации по separatorInset подразумевает, что он каким-то образом контролирует лишние записи, но я не понимаю, как это сделать:

В iOS 7 и более поздних версиях разделители ячеек не доходят до края табличного представления. Это свойство устанавливает отступ по умолчанию для всех ячеек в таблице, так же как rowHeight устанавливает высоту по умолчанию для ячеек. Он также используется для управления "лишними" разделителями, нарисованными внизу таблиц простого стиля.

Установите разделитель в viewDidLoad:

self.tableView.separatorColor = [UIColor redColor];

И вы получаете это:

введите здесь описание изображения

И когда вы устанавливаете separatorInset и цвет:

self.tableView.separatorInset = UIEdgeInsetsZero;    // <- any custom inset will do
self.tableView.separatorColor = [UIColor redColor];

Вы получаете это:

введите здесь описание изображения

Почему это происходит и как я могу сделать все разделители красными и установить все вставки разделителей равными нулю? Это ошибка?


person Aaron    schedule 01.10.2013    source источник
comment
Те же проблемы возникают с любым пользовательским separatorInset, а не только с UIEdgeInsetsZero. К счастью, принятое решение работает и с любым пользовательским separatorInset. Спасибо!   -  person Hilton Campbell    schedule 25.01.2014
comment
Хороший улов. Я обновил вопрос, чтобы включить это.   -  person Aaron    schedule 23.02.2014


Ответы (2)


Решил, но не могу объяснить почему.

Поменяйте местами порядок двух операторов. Сначала установите цвет, затем вставку:

self.tableView.separatorColor = [UIColor redColor];
self.tableView.separatorInset = UIEdgeInsetsZero;

Все работает:

введите здесь описание изображения

person Aaron    schedule 01.10.2013
comment
да. Можете ли вы сказать нам, почему ваш ответ также не является взломом? Это не объясняет, почему цвет не соблюдается. - person Aaron; 10.04.2014
comment
@AustinMarusco, это не взлом, это ошибка iOS, по-видимому, из-за того, что она не перекрашивает разделители, если цвет изменился после применения нового стиля. - person Ben Affleck; 03.05.2014
comment
Итак, вы говорите, что в дополнение к коду в моем ответе вы должны добавить код в cellForRowAtIndexPath, тогда это не взлом? Почему добавление избыточных вызовов в separatorInset не является взломом? - person Aaron; 03.05.2014
comment
Я признаю, что оба ответа являются хаками, но я думаю, что этот хуже. Изменение порядка двух операторов не должно изменить результат, если только экран не будет отображаться снова во время текущего цикла выполнения (с использованием layoutSubviews). В целом, если бы кто-то потом приходил отредактировать ваш код, ему было бы легче сломать его, если бы порядок имел значение для простых свойств пользовательского интерфейса. - person Austin Marusco; 06.05.2014
comment
Решено, просто добавив комментарий над кодом. - person Ian Dundas; 04.06.2014

Попробуйте добавить это в cellForRowAtIndexPath. А также установка separatorInsets tableView.

cell.separatorInset = UIEdgeInsetsZero;

Из документов UITableViewCell iOS:

@property (неатомарное) UIEdgeInsets separatorInset

Значения вставки для содержимого ячейки.

Вы можете использовать это свойство, чтобы добавить пространство между содержимым текущей ячейки и левым и правым краями таблицы. Положительные значения вставки перемещают содержимое ячейки и разделитель ячеек внутрь и от краев таблицы. Отрицательные значения обрабатываются так, как если бы вставка была установлена ​​на 0.

person Austin Marusco    schedule 09.04.2014