0

可能重复:
更改 UITableViewCell 的 imageView 的边界

我有一个自定义UITableViewController,并且在其中我动态地设置了一个UITableViewCell带有样式的样式UITableViewCellStyleSubtitle。一切都很好,除了当一个单元格被重新使用时,它的imageView属性不尊重我的contentModeclipsToBounds设置。理想情况下,我希望内容遵循默认大小/形状(我认为是 40x40 正方形)。

还有其他帖子(下面的链接)建议对图像进行子类UITableViewCell化或重新调整图像大小以完全适合,但这两者都感觉像是解决方法,并且(恕我直言)鉴于我已经拉小(非方形),这会使我的代码过于复杂图片。

建议子类化 UITableViewCell: 改变 UITableViewCell 的 imageView 的边界

建议调整所有图像的大小: UITableViewCell's imageView fit to 40x40

示例代码:

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

    static NSString *kCellIdentifier = @"Cell";
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:kCellIdentifier];
    if (!cell) {
        cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:kCellIdentifier];
    }

    NSString *mainText = @"mainText";
    NSString *subtitle = @"subText";

    [[cell textLabel] setText:mainText];
    [[cell detailTextLabel] setText:subtitle];

    // get album cover
    UIImage *imageForCell = [album objectForKey:@"coverImage"];

    // this is the broken part - 
    // it works upon first load, but it is NOT applied when a cell is re-used/dequeued..
    // instead, the image is displayed un-scaled and un-square
    [[cell imageView] setAutoresizingMask:UIViewAutoresizingFlexibleHeight|UIViewAutoresizingFlexibleWidth];
    [[cell imageView] setContentMode:UIViewContentModeScaleAspectFill];
    [[cell imageView] setClipsToBounds:YES];

    if (imageForCell) {

        [[cell imageView] setImage:imageForCell];

    } else {

        /* code to retrieve custom image */
    }


    return cell;
}

是什么赋予了?UITableViewCell 中是否有错误?或者这是出于某种设计原因?

4

1 回答 1

1

我很确定 Apple 声称在布局方面拥有 textLabel、detailTextLabel 和 imageView 的所有权,所以我认为您不能将此称为缺陷。

-tableView:willDisplayCell:forRowAtIndexPath:是一个专门用于格式化单元格布局的 API。你应该有更好的运气在那里进行格式更改。

尽管文档暗示了什么,但没有奏效。

于 2012-10-08T18:56:15.510 回答