我正在尝试在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”]时;背景图像仍然没有填满完整的细胞背景。
答案 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;
}
感谢大家的建议!