Overlapping UITableViewCell content views(重叠 UITableViewCell 内容视图)
问题描述
我有一张表格,其单元格如下所示:
如您所见,每个单元格的顶部边框都应该与上面的单元格重叠.现在,这个边框是背景的一部分(目前没有重叠).
I have this table whose cells look like this:
As you can see, the top border of every cell is supposed to overlap with the cell above. Right now, this border is part of the background (no overlapping so far).
现在,我已将边框与背景分开,我的单元格创建代码如下所示:
Now, I've separated the border from the background and my cell creation code looks like this:
#define QAImage(NAME) [[[UIImageView alloc] initWithImage:[UIImage imageNamed:NAME]] autorelease]
- (UITableViewCell*) tableView:(UITableView*)table cellForRowAtIndexPath:(NSIndexPath*)index
{
UITableViewCell *cell = [table dequeueReusableCellWithIdentifier:@"Entry"];
if (cell == nil)
{
cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault
reuseIdentifier:@"Entry"] autorelease];
cell.backgroundView = QAImage(@"bg-cell.png");
cell.selectedBackgroundView = QAImage(@"bg-cell-sel.png");
cell.selectionStyle = UITableViewCellSelectionStyleGray;
UIImageView *img = QAImage(@"disclosure.png");
img.highlightedImage = [UIImage imageNamed:@"disclosure-sel.png"];
cell.accessoryView = img;
CGRect r = cell.frame;
r.size.height = table.rowHeight;
r.size.width = table.frame.size.width;
cell.frame = r;
r = cell.contentView.frame;
r.origin = CGPointMake(13, 13);
r.size.width -= 8 + img.frame.size.width;
r.size.height -= 25;
[cell.contentView addSubview:[[[TagView alloc] initWithFrame:r] autorelease]];
img = QAImage(@"cell-top.png");
img.highlightedImage = [UIImage imageNamed:@"cell-top-sel.png"];
img.opaque = NO;
r = img.frame;
r.origin = CGPointMake(0, 1 - r.size.height); // The (supposed) overlapping happens here.
img.frame = r;
cell.contentView.clipsToBounds = NO;
[cell.contentView addSubview:img];
}
// Here I set the title. (omitted)
return cell;
}
问题是,只有当我在表格中向上滚动时才会显示边框,否则它本身会被其上方的单元格重叠.(错误的方式.)
The problem is, the border is only shown when I'm scrolling up in the table, else it is itself overlapped by the cell above it. (The wrong way around.)
我已经在 -tableView:willDisplayCell:forRowAtIndexPath:
中尝试过 [cell setNeedsDisplay]
,添加边框(cell-top.png
) 每次请求一个单元格时(这显然会导致多次绘制并且看起来不太好;无论如何,它仍然不能解决我的问题)并设置 img.layer.zPosition = 2
.
I've tried [cell setNeedsDisplay]
in -tableView:willDisplayCell:forRowAtIndexPath:
, adding the border (cell-top.png
) every time a cell is requested (which obviously leads to multiple drawing and doesn't look good; regardless, it still doesn't solve my problem) and setting img.layer.zPosition = 2
.
如何强制 UIImageView 始终保持在顶部?
How can I force that UIImageView to stay on top all the time?
推荐答案
我的建议是继承 UITableView 并覆盖 layoutSubviews 以将可见单元格视图放入您希望它们的 z 顺序中,如下所示:
My suggestion would be to subclass UITableView and override layoutSubviews to put the visible cell views into the z-order you want them to be in like this:
- (void)layoutSubviews {
[super layoutSubviews];
NSArray *sortedIndexPaths = [[self indexPathsForVisibleRows] sortedArrayUsingSelector:@selector(compare:)];
for (NSIndexPath *path in sortedIndexPaths) {
UITableViewCell *cell = [self cellForRowAtIndexPath:path];
[self bringSubviewToFront:cell];
}
}
这可能太慢了,或者您可能需要将 bringSubviewToFront:
更改为 sendSubviewToBack:
,但希望这能给您一个尝试的方向.
This might be too slow, or you might need to change bringSubviewToFront:
to sendSubviewToBack:
, but hopefully that gives you a direction to try out.
如果您的目标是 iOS 6,现在的另一个选择是使用 UICollectionView,它内置了对 z-ordering 的支持.
Another option now, if you're targeting iOS 6, is to use a UICollectionView instead, which has built-in support for z-ordering.
这篇关于重叠 UITableViewCell 内容视图的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
本文标题为:重叠 UITableViewCell 内容视图
基础教程推荐
- Kivy Buildozer 无法构建 apk,命令失败:./distribute.sh -m “kivy"d 2022-01-01
- Android:对话框关闭而不调用关闭 2022-01-01
- 在 gmail 中为 ios 应用程序检索朋友的朋友 2022-01-01
- 如何在没有IB的情况下将2个按钮添加到右侧的UINavigationbar? 2022-01-01
- 如何让对象对 Cocos2D 中的触摸做出反应? 2022-01-01
- 如何在 iPhone 上显示来自 API 的 HTML 文本? 2022-01-01
- UIWebView 委托方法 shouldStartLoadWithRequest:在 WKWebView 中等效? 2022-01-01
- 当从同一个组件调用时,两个 IBAction 触发的顺序是什么? 2022-01-01
- android 应用程序已发布,但在 google play 中找不到 2022-01-01
- 如何在 UIImageView 中异步加载图像? 2022-01-01