cell.selectedBackgroundView覆盖单元格中的UIView

cell.selectedBackgroundView覆盖单元格中的UIView,uiview,uitableview,Uiview,Uitableview,我有一张桌子。在表的每个单元格中,我创建了一个简单的条形图(只有两个背景填充的UIView) 我已将cell.selectedBackgroundView设置为图像 当选择单元格时,它似乎覆盖了条形图的一部分。有人知道为什么吗 红色是选定的单元格。顶部和底部是未选择的单元格: 在图像中,灰色条、棕色条、2个数字(x.xx)和左侧的半透明线都是1 UIView的子视图。UIView将添加到单元格中。线和2个数字仍然存在,但2个条消失了 下面是一些代码: 选定的单元格图像集如下所示: UIImag

我有一张桌子。在表的每个单元格中,我创建了一个简单的条形图(只有两个背景填充的UIView)

我已将cell.selectedBackgroundView设置为图像

当选择单元格时,它似乎覆盖了条形图的一部分。有人知道为什么吗

红色是选定的单元格。顶部和底部是未选择的单元格:

在图像中,灰色条、棕色条、2个数字(x.xx)和左侧的半透明线都是1 UIView的子视图。UIView将添加到单元格中。线和2个数字仍然存在,但2个条消失了

下面是一些代码:

选定的单元格图像集如下所示:

UIImage *selectedRowImage = [UIImage imageNamed:@"table-selectedcellbg-red-45px-stretch.png"];
cell.selectedBackgroundView = [[UIImageView alloc]initWithImage:[selectedRowImage resizableImageWithCapInsets:UIEdgeInsetsMake(selectedRowImage.size.height, selectedRowImage.size.width/2, selectedRowImage.size.height, selectedRowImage.size.width/2)]];
[cell sendSubviewToBack:cell.selectedBackgroundView]; // This didn't make a difference
UIView *graph = [barGraph getGraph];
UIView *graphView = [[UIView alloc]initWithFrame:CGRectMake(150, (tableView.rowHeight - graph.frame.size.height)/2, graph.frame.size.width, graph.frame.size.height)];
[graphView addSubview:graph];
[cell addSubview:graphView];
按如下方式添加视图集:

UIImage *selectedRowImage = [UIImage imageNamed:@"table-selectedcellbg-red-45px-stretch.png"];
cell.selectedBackgroundView = [[UIImageView alloc]initWithImage:[selectedRowImage resizableImageWithCapInsets:UIEdgeInsetsMake(selectedRowImage.size.height, selectedRowImage.size.width/2, selectedRowImage.size.height, selectedRowImage.size.width/2)]];
[cell sendSubviewToBack:cell.selectedBackgroundView]; // This didn't make a difference
UIView *graph = [barGraph getGraph];
UIView *graphView = [[UIView alloc]initWithFrame:CGRectMake(150, (tableView.rowHeight - graph.frame.size.height)/2, graph.frame.size.width, graph.frame.size.height)];
[graphView addSubview:graph];
[cell addSubview:graphView];

有什么想法吗?

我想答案可以在以下列表中找到:

讨论

对于普通样式表中的单元格,默认值为
nil
UITableViewStylePlain
)和非
nil
,用于节组表 (
UITableViewStyleGroup
UITableViewCell
添加此 属性作为子视图,仅当选定单元格时它添加了 选定背景视图作为背景正上方的子视图 视图(),如果它不是nil,或在所有其他视图后面。 调用setSelected:animated:会使选定的背景视图 使用alpha淡入淡出设置进出动画

似乎只有当单元格的相应
backgroundView
属性不是
nil
时,
selectedBackgroundView
才能正常工作

尝试添加
背景视图
,然后再次测试

希望这能帮到你


编辑: 由于这不是解决方案,我试图重现您的问题,但没有成功:
背景视图
停留在
问题标记图标
(类似于您的
图形视图
)后面

代码:

这就是我的
stretchableImage.png
的样子: strecheableImage.png“>

单元格1已选中,但问号图标(您的图形)保持在前面:


抱歉,我帮不上忙。

如果您将
图形视图向前移动会发生什么情况?刚才添加了此内容,[cell bringsubview tofront:graphView];没有区别。我认为这不是前进/后退的问题,因为数字和线条会显示出来。如果UIView在后面,那么两个栏、线条和数字都应该隐藏。是的,没错。这是一个愚蠢的问题,无法找到解决方案。在我的项目中,背景视图和selectedBackgroundView是在cellForRow期间添加的。然后,当选择时,什么也不会发生。如果我在setSelected中添加selectedBackgroundView,它将抛出的内容超过所有其他视图。使用RevealApp进行验证。您找到解决方案了吗?嗨,Anneblue,谢谢。我添加了一个backgroundView,但仍然没有成功。我尝试了一个空白图像(cell.backgroundView=[[UIImageView alloc]initWithImage:[[UIImage alloc]init]];)这可能是苹果的错误吗?我想我已经解决了。我的条形图是背景设置的UIView。我想当单元格被选中时,所有子视图都设置为透明。这就是为什么线条和文本字段仍然显示的原因。我可以通过将UIView设置为图像而不是填充背景色来解决这个问题。我不确定为什么会这样做,我的最佳猜测是动画??不知道。@Jason搞定了,选中后,单元格的子视图的背景将变为透明。我只是使用此处找到的扩展将视图的背景设置为图像而不是背景色: