UITableview 默认单元格中的自定义分隔符显示意外行为

Posted

技术标签:

【中文标题】UITableview 默认单元格中的自定义分隔符显示意外行为【英文标题】:Custom seperator in UITablview default cell gets shows unexpected behaviour 【发布时间】:2018-09-10 10:58:28 【问题描述】:

请通过这些要点

您好,我已在代码中动态添加了一个表格视图。 我想在默认的 tableview 单元格中显示我自己的分隔符。 默认分隔符与 y 轴有一定距离。

我知道我们可以使用单元格分隔符插入属性来实现这一点的答案。 但是我遇到了奇怪的问题。

DropDownTbl=[[UITableView alloc]initWithFrame:CGRectMake(BookTypeTxt.frame.origin.x, BookTypeTxt.frame.origin.y+BookTypeTxt.frame.size.height, BookTypeTxt.frame.size.width-11, height)];
DropDownTbl.separatorStyle = UITableViewCellSeparatorStyleNone;
DropDownTbl.tag=98;
DropDownTbl.delegate=self;
DropDownTbl.dataSource=self;

[self.settingView addSubview:DropDownTbl];
[DropDownTbl reloadData];

在我的 tableview 单元格中,我添加了这种样式的分隔符,问题是这样,分隔符视图被添加两次,显示在给定图像中

UITableViewCell *cell = (UITableViewCell *) [tableView dequeueReusableCellWithIdentifier:cellIdentifier];

if(cell == nil) 
    cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:cellIdentifier];


cell.textLabel.text=[BookTypeArray objectAtIndex:indexPath.row];
cell.textLabel.font = [UIFont fontWithName:@"HelveticaNeue-Medium" size:15.0f];
UIView *lineView = [[UIView alloc] initWithFrame:CGRectMake(0,cell.contentView.frame.size.height-1, DropDownTbl.frame.size.width, 1)];
lineView.backgroundColor = [UIColor blackColor];
[cell.contentView addSubview:lineView];

cell.textLabel.font=[UIFont fontWithName:@"Arial" size:12];

return cell;

所以我决定在单元格 == nil 括号中添加 linview

UITableViewCell *cell = (UITableViewCell *) [tableView dequeueReusableCellWithIdentifier:cellIdentifier];
if(cell == nil) 
    cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:cellIdentifier];
    UIView *lineView = [[UIView alloc] initWithFrame:CGRectMake(0,cell.contentView.frame.size.height-1, DropDownTbl.frame.size.width, 1)];
    lineView.backgroundColor = [UIColor blackColor];
    [cell.contentView addSubview:lineView];


cell.textLabel.text=[BookTypeArray objectAtIndex:indexPath.row];
cell.textLabel.font = [UIFont fontWithName:@"HelveticaNeue-Medium" size:15.0f];
cell.textLabel.font=[UIFont fontWithName:@"Arial" size:12];

return cell;

以这种方式,当重复使用单元格时,我的分隔符会消失。我只想知道为什么会这样?

【问题讨论】:

您是否删除了单元格的默认分隔符? 在添加之前删除您的特定视图单元格 ***.com/questions/3005540/how-to-remove-sub-views 【参考方案1】:

产生此问题是因为每次滚动 TableView 时,cellForRowAt 被多次调用,每次此代码在单元格 contentView 中添加新行。

试试这个。

[[cell.contentView viewWithTag:5] removeFromSuperview];

if (cell == nil) 
    cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:cellIdentifier];



UIView *lineView = [[UIView alloc] initWithFrame:CGRectMake(0,cell.contentView.frame.size.height-1, tableView.frame.size.width, 1)];
lineView.tag = 5;
lineView.backgroundColor = [UIColor blackColor];
[cell.contentView addSubview:lineView];

【讨论】:

但是第二种方式,当细胞被重复使用时,细胞系会消失。 基本上我想知道为什么会这样?我们正在使用自定义分隔符重用单元格,但它消失了。我不想知道如何实现这一点。 为什么我们必须从 superview 中删除并再次添加。 @HimanDhawan,它确实有效。我试过了,然后告诉你。

以上是关于UITableview 默认单元格中的自定义分隔符显示意外行为的主要内容,如果未能解决你的问题,请参考以下文章

更改单元格中的数据后,UITableView 中的自定义单元格将无法正确重新加载

数据未显示在 UITableView 的自定义单元格中

UITableView - 自定义 UITableViewCell 中的自定义 selectedBackgroundView 选择时隐藏单元格分隔符

自定义 UITableView 单元格中的 UILabel 未随核心数据更改而更新

在 UITableView 的自定义单元格中使用滑块

Swift:如何在动态 UITableView 的自定义单元格中获取滑块的值?