Просте і чітке рішення, яке працює як на iOS 8, так і на iOS 9 (бета-версія 1)
Ось простий, чистий і не нав'язливий спосіб вирішення. Він включає виклик методу категорії, який буде фіксувати роздільники.
Все, що вам потрібно зробити, - це спуститися за ієрархією комірки та розкрити роздільник. Подобається це:
for (UIView *subview in cell.contentView.superview.subviews) {
if ([NSStringFromClass(subview.class) hasSuffix:@"SeparatorView"]) {
subview.hidden = NO;
}
}
Я рекомендую додати це до категорії на UITableViewCell, наприклад:
@interface UITableViewCell (fixSeparator)
- (void)fixSeparator;
@end
@implementation UITableViewCell (fixSeparator)
- (void)fixSeparator {
for (UIView *subview in self.contentView.superview.subviews) {
if ([NSStringFromClass(subview.class) hasSuffix:@"SeparatorView"]) {
subview.hidden = NO;
}
}
}
@end
Оскільки сепаратор може зникнути в іншій комірці, ніж обрана в даний час, можливо, найкраще закликати це виправлення до всіх комірок у поданні таблиці. Для цього ви можете додати категорію до UITableView, яка йде так:
@implementation UITableView (fixSeparators)
- (void)fixSeparators {
for (UITableViewCell *cell in self.visibleCells) {
[cell fixSeparator];
}
}
@end
Якщо це на місці, ви можете зателефонувати -fixSeparatos
на ваш tableView одразу після дії, яка змушує їх зникнути. У моєму випадку це було після дзвінка [tableView beginUpdates]
і [tableView endUpdates]
.
Як я вже говорив на початку, я перевірив це як на iOS 8, так і на iOS 9. Я припускаю, що він буде працювати навіть на iOS 7, але у мене немає можливості спробувати це. Як ви, напевно, знаєте, це не співпадає з внутрішніми елементами комірки, щоб вона могла перестати працювати в майбутньому випуску. І Apple теоретично могла (0,001% шансу) відхилити вашу програму через це, але я не можу зрозуміти, як вони могли навіть дізнатися, що ви там робите (перевірка суфіксу класу статичними аналізаторами не може бути виявлена як щось погано, ІМО).