Проведите по удалению ячейки, чтобы tableViewHeader перемещался с помощью ячейки
Я столкнулся с необычной ошибкой с моим tableViewHeader
на моем UITableView
в iOS 8. При прокрутке на ячейке, чтобы открыть кнопку удаления (стандартная прошивка iOS для удаления), она перемещает tableViewHeader
вдоль с клеткой, которая выкачивается. Когда я прокручиваю ячейку, заголовок движется так же, как и проводящая ячейка. Никакие другие ячейки в представлении таблицы не перемещаются, а только заголовок и всякая ячейка прокручиваются. Я тестировал это на iOS 7, не столкнулся с этой проблемой. Для меня это похоже на ошибку с tableViewHeader
в iOS 8, поскольку это происходит только в этой версии и похоже на то, что никогда не должно происходить. Я не вижу причин, по которым заголовок никогда не включался в салфетки для удаления.
Ниже представлен только макет. Прокрутка для удаления в приложении по умолчанию - iOS, ничего нестандартное.
![Below is just a mockup. Swipe-to-delete within the app is default iOS, nothing custom.]()
Ответы
Ответ 1
Основываясь на ответе ферриса, я нашел самый простой способ использования UITableViewCell в качестве заголовка раздела, чтобы вернуть contentView ячейки в viewForHeaderInSection. Код выглядит следующим образом:
override func tableView(tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? {
let cell : cellSectionHeader = tableView.dequeueReusableCellWithIdentifier("SectionHeader") as cellSectionHeader
return cell.contentView
//cellSectionHeader is my subclassed UITableViewCell
}
Ответ 2
Это было вызвано тем, что я использовал UITableViewCell в качестве заголовка для таблицы. Чтобы решить проблему очистки, вместо использования tableView.tableHeaderView = cell
, я использую следующее:
UIView *cellView = [[UIView alloc] init];
[cellView addSubview:cell];
tableView.tableHeaderView = cellView
Я не знаю, почему это решает проблему, особенно если она работает на iOS 7, но, похоже, она решает проблему.
Обязательно добавьте все представления в представление ячеек, как это предполагается в ячейках contentView, иначе кнопки не будут реагировать.
Работает:
[cell addSubview:view];
или [self addSubview:view];
Не работает:
[cell.contentView addSubview:view]
или [self.contentView addSubview:view]
Ответ 3
Способ избежать заголовков, перемещающихся с помощью ячеек, состоит в том, чтобы вернуть contentView ячейки в viewForHeaderInSection. Если у вас есть подклассы UITableViewCell с именем SectionHeaderTableViewCell, это правильный код:
-(UIView *) tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section {
SectionHeaderTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"SectionHeader"];
//Do stuff to configure your cell
return cell.contentView;
}
Ответ 4
SWIFT 3.0 Проверено решение. Как упоминалось в первом примере для Objective-C; ключевой момент возвращает cell.contentView вместо cell. Таким образом, новый синтаксис формата выглядит следующим образом.
override func tableView(_ tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? {
// HeaderCell is the name of custom row designed in Storyboard->tableview->cell prototype
let cell = tableView.dequeueReusableCell(withIdentifier: "HeaderCell")
cell.songLabel.text = "Your Section Name"
return cell.contentView
}
Ответ 5
Попробуйте реализовать этот метод и дайте правильные условия для проверки swipe.If этот метод вызывается для представления заголовка.
1.tableView: editingStyleForRowAtIndexPath: 2.tableView: titleForDeleteConfirmationButtonForRowAtIndexPath: 3.tableView: shouldIndentWhileEditingRowAtIndexPath:
Ответ 6
Одна из проблем, не упомянутых в методе .contentView, заключается в том, что если ваша ячейка представления таблицы использует layoutSubviews, вы можете не получить требуемое поведение, потому что макеты не будут вызваны. Я закончил создание полностью отдельного подкласса UIView, который поддерживает как нормальную работу ячейки, так и работу с заголовком, и создавая минимальный класс ячеек UITableView, который использует это.
Ответ 7
Вопрос Виктора о потере цвета фона, решается путем добавления к Брэду ответа:
cell.backgroundColor = UIColor.cyanColor()
To:
cell.contentView.backgroundColor = UIColor.cyanColor()
Ответ 8
Если после добавления cell.contentView раздел становится пустым, вам нужно перейти к инспектору свойств и убедиться, что класс универсального размера проверен (где он говорит "установлен" ). Скорее всего, вы используете wRhR или что-то в этом роде. Вы должны пройти через каждый элемент и ограничение таблицы и поставить галочку в установленном флажке.