UITableViewCell后台视图没有拉伸

时间:2014-04-01 09:47:20

标签: ios uitableview stretch

我正在尝试在UITableViewCell的背面设置拉伸的背景图片。 这是一个常见问题,多次回答,所以我这样做是“标准方式”:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
  UITableViewCell *cell;
  UIImage* bgImg;

  bgImg = [[UIImage imageNamed:@"menu_bg_selected.png"] resizableImageWithCapInsets:UIEdgeInsetsMake(0, 5, 1, 0)]; //top/left/bottom/right
  cell = [tableView dequeueReusableCellWithIdentifier:@"mycell" forIndexPath:indexPath];
  [cell setBackgroundView:[[UIImageView alloc] initWithImage:bgImg]];
  return cell;
}

如果我只是尝试这个,我会获得平铺背景。 在阅读了几个类似的问题/答案后,我确实尝试了:

  • 强制缩放背景视图:cell.backgroundView.contentMode = UIViewContentModeScaleToFill;

  • 强制调整背景视图的大小:cell.backgroundView.clipsToBounds = YES;

  • 设置遮罩的自动调整大小:cell.backgroundView.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight;

  • 尝试强制使用背景UIImageView

  • 的帧大小

看来我的背景图片被部分拉伸到预定的大小,然后平铺(没有足够的声誉来上传图片,抱歉......):

  • 垂直拉伸是局部的,不使用全高
  • 水平拉伸是部分的,不使用全宽

背景图片为6x3像素图像(左侧为蓝色垂直线,背面为深灰色,底部为浅灰色水平线)。

我做错了什么?

感谢您的帮助!

[编辑] 实际上问题似乎不是UIEdgeInsetsMake问题。 使用bgImg = [UIImage imageNamed:@“menu_bg_selected.png”]时;背景图像仍然没有填满完整的细胞背景。

3 个答案:

答案 0 :(得分:0)

我认为问题来自

UIEdgeInsetsMake(0, 5, 1, 0)

基本上你说我想要一个可伸缩的图像,但我不希望底线伸展到左边界。这没有任何意义。你的边缘插入必须留下一些可伸缩的部分。例如,如果您的图像是6x3,则可以:

UIEdgeInsetsMake(1, 2, 1, 2)

但是,您可能希望之前重新设计图像。

答案 1 :(得分:0)

此代码适用于UIImage

UIIMage *bgImage = [[UIImage imageNamed:@"menu_bg_selected.png"] stretchableImageWithLeftCapWidth:15  topCapHeight:15];

答案 2 :(得分:0)

好吧,我明白了!

问题是我的背景图片只是部分拉伸然后平铺以填充整个单元格(无论UIEdgeInsetsMake参数是什么)。

我成功使用:resizableImageWithCapInsets和指定resizingMode参数

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
  UITableViewCell *cell;

  UIImage* bgImg;
  bgImg = [[UIImage imageNamed:@"menu_bg_selected.png"] resizableImageWithCapInsets:UIEdgeInsetsMake(0, 5, 1, 0) resizingMode:UIImageResizingModeStretch];
  cell = [tableView dequeueReusableCellWithIdentifier:@"mycell" forIndexPath:indexPath];
  [cell setBackgroundView:[[UIImageView alloc] initWithImage:bgImg]];
  return cell;
}

感谢大家的建议!