1

我面临一个问题,以高于单元格高度的高度显示单元格选择的图像。

这是示例:

在此处输入图像描述

所以在这里,我的单元格高度是 44,但选定的单元格背景图像高度是 50。

我试图设置单元格选择的背景图像,并通过将新的图像视图添加到单元格作为子视图。但是这样做会使单元格被选中并且图像正在缩放以填充单元格高度的大小。因此该箭头出现在单元格内并且图像被挤压。

我尝试的第二种方法是使用按钮分隔箭头图像,但该选项对我也不起作用。如果我采用这种方法,则不会显示该按钮。在这里,我认为该部分与表格视图的下一行重叠。

请建议我如何解决这种情况。

提前致谢。

4

2 回答 2

0

我想您可以使用Clip Subviews单元格或实际表格的属性。您只需将UIImageView其放入单元格中(不确定是否可以将其分配为背景属性,但您可以尝试)并将其高度设置为大于单元格高度。但唯一的问题是您可能会遇到图像重叠的情况。您可以尝试通过设置实际索引将视图放置在选定状态的位置来解决它。

嗯,测试了一下。看看这段代码:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString *cellId = @"cellIdentifier";
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:cellId];
    if (!cell) {
        cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:cellId] autorelease];
        cell.clipsToBounds = NO;
        cell.textLabel.textColor = [UIColor whiteColor];
        cell.textLabel.backgroundColor = [UIColor clearColor];
        cell.selectionStyle = UITableViewCellSelectionStyleNone;

        CGRect frame = cell.bounds;
        UIImageView *background = [[UIImageView alloc] initWithFrame:frame];
        background.image = [UIImage imageNamed:@"CellBackground"];
        cell.backgroundView = background;
        [background release];

        frame.size.height = 50.0;
        UIImageView *selected = [[UIImageView alloc] initWithFrame:frame];
        selected.tag = 13;
        selected.image = [UIImage imageNamed:@"CellSelectedBackground"];
        [cell insertSubview:selected atIndex:1];
        selected.hidden = YES;
        [selected release];
    }
    cell.textLabel.text = [NSString stringWithFormat:@"cell %d", indexPath.row];

    return cell;
}

这里的主要内容是cell.clipsToBounds = NO;[cell insertSubview:selected atIndex:1];。但是为单元创建子类并在此处处理所有内容和选择会更好。尽管从您的图片中可以看出,您已经在使用子类单元格了:)

于 2012-08-24T09:48:43.103 回答
0

感谢您的所有回复。我已经解决了这个问题,代码在这里:

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

      if (self) {
        // Initialization code

        [self setClipsToBounds:NO];

       // selected background image view
        if (self.selectedBgImageView == nil) {

    //     w 302  :  h 50
          self.selectedBgImageView = [[UIImageView alloc]
                                      initWithFrame:CGRectMake(0, -5, 302, 50)];
        }
      [self.selectedBgImageView setContentMode:UIViewContentModeScaleToFill];    
        [self.contentView addSubview:self.selectedBgImageView];
}


- (void)setSelected:(BOOL)selected animated:(BOOL)animated
{
  [super setSelected:selected animated:animated];

  // Configure the view for the selected state

  // child count label
  [self.childCountLabel setBackgroundColor:
    [UIColor colorWithPatternImage:
    [UIImage imageNamed:@"btn_contacts_network_total"]]];

  // selected background image view
  if (self.indentationLevel % 2 == 0) {

    [self.selectedBgImageView setImage:
     [UIImage imageNamed:@"img_contacts_network_expand_box_tier1"]];
  }
  else {

    [self.selectedBgImageView setImage:
     [UIImage imageNamed:@"img_contacts_network_expand_box_tier2"]];
  }

  [self.selectedBgImageView setContentMode:UIViewContentModeScaleToFill];
//  [self.con:selectedBgImageView];
}

在那里我发现设置框架是一个问题,我不知道这种奇怪的框架原点计算的原因。但不知何故,它对我有用,并且按照要求完美地工作。

如果有人知道这种行为背后的原因,请指导我。

于 2012-08-26T06:00:27.273 回答