如何使用高度超过细胞高度的细胞背景图像?

时间:2012-08-24 09:40:46

标签: iphone ios ipad uitableview custom-cell

我在使用高度显示单元格选定图像时遇到问题,高度高于单元格高度。

以下是样本:

enter image description here

所以在这里,我的细胞高度为44,但选定的细胞背景图像高度为50.

我尝试设置单元格选择的背景图像,并将新图像视图添加到单元格作为子视图。但这样做,细胞被选中和图像正在扩大规模以填充细胞高度的大小。因此,箭头出现在单元格内,图像被挤压。

我试过的第二种方法是使用按钮分离箭头图像,但该选项对我来说也不起作用。 如果我采用这种方法,那么按钮就不会显示出来。在这里,我认为该部分正在与表视图的下一行重叠。

请建议我如何解决这个问题。

提前致谢。

2 个答案:

答案 0 :(得分:0)

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

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

- (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];。但是为单元格创建子类并在此处理所有内容和选择会更好。虽然在你的照片中看到你已经使用了子类化细胞:)

答案 1 :(得分: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];
}

在那里我发现设置帧是一个问题,我不知道帧起源的这种奇怪计算的原因。但不知何故,它对我有用,并且按照要求完美运行。

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