我在iOS 8的tableViewHeader
上遇到了UITableView
的奇怪错误。当在单元格上滑动以显示删除按钮(标准iOS滑动到删除)时,它会移动tableViewHeader
以及正在刷的单元格。当我滑动单元格时,标题的移动方式与刷过的单元格相同。表视图中没有其他单元格被移动,只有标题和任何单元格被刷过。我已经在iOS 7上测试过了这个问题。对我来说,这似乎是iOS 8中tableViewHeader
的一个错误,因为它只出现在这个版本中,似乎永远不会发生。我认为没有理由将标题包含在轻扫到删除中。
以下只是一个模型。在应用程序中滑动删除是默认的iOS,没有任何自定义。
答案 0 :(得分:49)
基于ferris的答案,我发现使用UITableViewCell作为节头时最简单的方法是返回viewForHeaderInSection中单元格的contentView。代码如下:
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
}
答案 1 :(得分:25)
这是因为我使用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]
答案 2 :(得分:9)
避免标题随单元格移动的方法是返回viewForHeaderInSection中单元格的contentView。如果你有一个名为SectionHeaderTableViewCell的子类UITableViewCell,这是正确的代码:
-(UIView *) tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section {
SectionHeaderTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"SectionHeader"];
//Do stuff to configure your cell
return cell.contentView;
}
答案 3 :(得分:3)
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
}
答案 4 :(得分:0)
尝试实现此方法并为检查滑动提供适当的条件。如果调用此方法进行标题视图。
1.tableView:editingStyleForRowAtIndexPath:2.tableView:titleForDeleteConfirmationButtonForRowAtIndexPath:3.tableView:shouldIndentWhileEditingRowAtIndexPath:
答案 5 :(得分:0)
.contentView方法未提及的一个问题是,如果表视图单元格使用layoutSubviews,则可能无法获得所需的行为 - 因为不会调用layoutSubviews。我最终创建了一个完全独立的UIView子类,它支持正常的单元操作和头操作,并创建一个使用它的最小UITableView单元类。
答案 6 :(得分:-1)
维克多失去背景色的问题,通过以下对布拉德答案的补充解决:
cell.backgroundColor = UIColor.cyanColor()
要:
cell.contentView.backgroundColor = UIColor.cyanColor()