UITableViewCell Z顺序

Vik*_*rov 6 xcode objective-c uitableview ios

我有一个包含单元格的uitableview。我试图弄清楚如何调整单元格的z顺序。我正在努力做到这一点: 在此处输入图片说明

但是当我加载tableview时,我得到了: 在此处输入图片说明

我已经尝试过了[tableView sendSubViewToBack:cell]。同样,当我滚动到底部然后返回到顶部时,结果类似于图1,但是当我向下滚动时,结果类似于图2。感谢您的帮助。

    static NSString *CellIdentifier = @"Cell";
NSString *row = [NSString stringWithFormat:@"%li",(long)indexPath.row];
GetMoreTableViewCell *cell = [_chapters dequeueReusableCellWithIdentifier:CellIdentifier];
NSMutableDictionary *deckCategory = [[_data valueForKey:key] valueForKey:row];

if (cell == nil) {
    cell = [[GetMoreTableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
}


[tableView bringSubviewToFront:cell];

if([[[_data valueForKey:key] valueForKey:[NSString stringWithFormat:@"%i",indexPath.row]] valueForKey:@"isDefault"] == [NSNumber numberWithBool:YES]) {
    cell.addButton.hidden = YES;
}
cell.ttitle.text = [[[_data valueForKey:key] valueForKey:row] valueForKey:@"Name"];
cell.backgroundColor = [UIColor clearColor];
cell.selectionStyle = UITableViewCellSelectionStyleNone;
CALayer * l = [cell.cellImage layer];
[l setMasksToBounds:YES];
[l setCornerRadius:10.0];

CALayer * b = [cell.cellBackground layer];
[b setMasksToBounds:YES];
[b setCornerRadius:19.0];
cell.cellImage.image = [UIImage imageNamed:[deckCategory valueForKey:@"Image"]];

if(indexPath.row == 0) {
    cell.cellBackground.image = [UIImage imageNamed:@"card_green.png"];
}
else if(indexPath.row == 1) {
    cell.cellBackground.image = [UIImage imageNamed:@"card_orange.png"];
}
else if(indexPath.row == 2) {
    cell.cellBackground.image = [UIImage imageNamed:@"card_red.png"];
}

return cell;
Run Code Online (Sandbox Code Playgroud)

Bre*_*ett 14

在UITableViewCells上使用阴影时,我遇到了相同的问题,屏幕下方(Y方向)的单元格的阴影与屏幕顶部较高的阴影重叠。

我的解决方案是基于indexPath在UITableViewCell的图层上设置Z位置。

cell.layer.zPosition = CGFloat(indexPath.row)
Run Code Online (Sandbox Code Playgroud)

我的问题仅发生在各个部分中。如果后续节中的单元格也遇到此问题,则需要在计算中添加节号。

cell.layer.zPosition = CGFloat(indexPath.section) * 1000.0 +  CGFloat(indexPath.row)
Run Code Online (Sandbox Code Playgroud)

如果每个部分中的行数超过1000,则增加幻数,或者考虑为什么您的App中有1000行;-)

  • 奇迹般有效! (2认同)
  • 我需要使用`cell.layer.zPosition = CGFloat(arrStatData.count - indexPath.row)`,但从你那里得到了想法。BTW 非常感谢 (2认同)
  • 虽然此解决方案乍看之下不错,但有一个主要警告:单元格将位于滚动指示器上方。 (2认同)

jrt*_*ton 1

不幸的是,您无法控制 cellForRow... 的调用顺序,因此将单元格发送到后面或前面是行不通的。

您可能需要创建一个方法来传递表的可见单元格并根据索引路径对它们重新排序,但是您会弄乱您无法控制的视图。表视图可以随时重新排列或添加子视图,您将尝试捕获所有这些事件。

我将使用集合视图而不是表视图来实现这样的视图,这将允许您使用自定义布局为每个索引路径指定 az 位置,并且允许您以不同的数量重叠单元格。创建自定义布局非常简单,特别是对于表格类型布局。