0

我在一个视图中有 2 个表。表 A 列出了一组用户。表 B 列出了一个用户对象。当在表 A 中选择一行时,表 B 会重新加载属于该用户的对象。

因此,当用户选择表 A 中的一行时,单元格背景中的图像将变为图像的突出显示版本。

这是背景图像的普通版本:默认图片

这是背景图像的突出显示版本:在此处输入图像描述

如您所见,突出显示的版本右侧有一个小箭头。这个箭头超出了表格本身的表格单元格的宽度。选择该行后,图像会发生应有的变化,但图像会缩小以使整个图像适合单元格。

我想要发生的是图像超出表格,或者位于该选定行的表格顶部。

我认为一种可能的解决方案是将表格置于所选行的中心,然后覆盖该图像,但如果用户要尝试滚动表格,则图像需要移动,这将是一个很大的痛苦。

所以我想知道是否可以将单元格的大小扩展到它选择的表格之外?

提前致谢!

编辑:

以下方法不起作用,以防万一有人尝试:

[cell setFrame:CGRectMake(cell.frame.origin.x, cell.frame.origin.y, cell.frame.size.width+20, cell.frame.size.height)];

4

2 回答 2

2

将 views 的 clipsToBounds 属性设置为 NO 将允许视图在其自己的框架之外绘制。

在您的 UITableViewController 子类中:

- (void)viewDidLoad
{
    [super viewDidLoad];
    // Do what you normally do here, if anything then add...

    self.view.clipsToBounds = NO;
}

这样做有一个副作用,您将看到在 tableview 的底部或顶部创建完整的单元格,而不是它们部分滚动到视图中。要么将表格视图放入另一个将 clipsToBounds 设置为 YES 的视图中,要么将表格视图的边缘与屏幕的边缘对齐,或者让视图覆盖底部和顶部(就像 UIToolbar 和 UINavigationBar 通常那样)。

要让 UITableViewCell 的 selectedBackgroundView 扩展到表格视图的框架之外,请创建 UITableViewCell 的子类并覆盖 layoutSubviews 方法。

- (id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier
{
    self = [super initWithStyle:style reuseIdentifier:reuseIdentifier];
    if (self) {
        // Initialization code

        self.backgroundView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"YQGyZ"]];
        self.selectedBackgroundView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"CQXYh"]];

        self.textLabel.backgroundColor = [UIColor clearColor];
        self.detailTextLabel.backgroundColor = [UIColor clearColor];
    }
    return self;
}

- (void)layoutSubviews {
    [super layoutSubviews];

    CGRect frame = self.selectedBackgroundView.frame;
    frame.size.width += 13; // where 13 is the size of the arrow overhang from the same images
    self.selectedBackgroundView.frame = frame;

    // You can also change the location of the default labels (set their background colors to clear to see the background under them)
    self.textLabel.frame = CGRectMake(70, 0, 148, 30);
    self.detailTextLabel.frame = CGRectMake(70, 30, 148, 30);
}

祝你好运。

于 2012-08-02T15:30:09.813 回答
0

我建议修改未选定单元格背景的图像资源,使其与选定背景的宽度相同,但侧面只有一个透明矩形。

于 2012-08-02T04:13:36.823 回答