iphone:把uiimage放在tableview部分标题中,拉伸问题

时间:2011-05-22 23:20:00

标签: iphone uitableview header uiimage

嘿,人们, 我将UIImage放入我的UITableVIew的节头中。因此我使用了一些我在互联网上找到的代码:

- (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section{

self.imageViewForImage.image = [helperClass resizeImage:[self.offerItem objectForKey: @"picture"] forSize:CGSizeMake(280.0, 280.0) ];

[self.imageViewForImage.layer setBorderColor: [[UIColor blackColor] CGColor]];
[self.imageViewForImage.layer setBorderWidth: 1.2];

self.imageViewForImage.contentMode = UIViewContentModeBottom;
return self.imageViewForImage;}


-(CGFloat)tableView:(UITableView*)tableView heightForHeaderInSection:(NSInteger)section
{
    if(section == 0)
        return 320;
    return 1.0;
}

首先,图像完全按照iPhone的完整320px宽度进行缩放。但后来我发现,我的整个UITableView的contentMode-property被设置为“UIViewContentModeScaleToFill”。所以我添加了一行代码,告诉我的UIImageView不要进行缩放。在我的情况下,我将其设置为“UIViewContentModeBottom”。

问题:这一切都有效,图像最终以280x280的预期尺寸显示,但我在图片周围做的边框仍然被拉伸/调整到iphone的整个宽度......?!

我无法弄清楚如何解决这个问题,因为我想要UIImage周围的边框..

感谢您提供任何帮助..

编辑:有没有人有想法,这里出了什么问题?

1 个答案:

答案 0 :(得分:9)

您的UIImageView有一个图层,其中包含您为图像设置的内容。图层的大小等于imageView的大小,但图像的大小小于它。因此,当您将contentMode设置为视图时,如果内容大小小于图层大小,则会向其显示在底层绘制图层内容的图层。因此,即使您已调整其内容图像的大小,图层的大小(以及其帧的大小)仍然相同。

问题在于,当您应该调整UIImageView的大小时,您正在尝试调整图像大小。这部分代码看起来像这样:

- (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section
{
    UIView *headerView = [[UIView alloc] init];

    self.imageViewForImage.frame = CGRectMake(20, 20, 280, 280);
    self.imageViewForImage.image = [self.offerItem objectForKey:@"picture"];
    self.imageViewForImage.autoresizingMask = UIViewAutoresizingFlexibleRightMargin | UIViewAutoresizingFlexibleTopMargin | UIViewAutoresizingFlexibleBottomMargin;

    [self.imageViewForImage.layer setBorderColor: [[UIColor blackColor] CGColor]];
    [self.imageViewForImage.layer setBorderWidth: 1.2];

    [headerView addSubview:self.imageViewForImage];
    return [headerView autorelease];
}

希望这会有所帮助!

更新:问题是此方法返回的视图由tableView重新构建以填充所有标头。因此,我们必须创建一个实际上是标题视图的视图,并在其上放置一个imageView。