TableViewCell图像行为问题

时间:2014-07-17 07:21:06

标签: ios uitableview

我在UITableView中遇到了行为问题,

youtube上的行为问题。

我的代码在这里:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString *CellIdentifier = @"Cell";

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    if (cell == nil) {
        cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease];
    }

    NSString *fileName = (NSString *)_movies[indexPath.row];
    UIImage *thumbnail = [UIImage imageWithContentsOfFile:_movieThumbnails[indexPath.row]];

    [cell.textLabel setText:fileName];
    [cell.imageView setImage:thumbnail];
    [cell.imageView setClipsToBounds:YES];
    [cell.imageView setAutoresizingMask:UIViewAutoresizingNone];

    return cell;
}

第一个缩略图分辨率为640 * 360,第二个为160 * 90,

细胞高度为60。

测试设备是iPhone 5 iOS 7.1.2和iPhone 5s iOS 7.0.6,

那些行为问题相同。


tableView:willDisplayCell:forRowAtIndexPath:在这里:

- (void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath
{
    [cell.imageView setFrame:CGRectMake(15.0f, 0.0f, 106.0f, 60.0f)];
}

此帧大小是按日志显示的当前imageView帧。

1 个答案:

答案 0 :(得分:1)

好的,所以这种行为的原因是点击删除按钮会启动更改内容视图框架的动画,这会导致这个奇怪的动画。

解决方案是创建UITableViewCell的子类,并在layoutSubviews方法中更改imageView和label的框架以适当地适应contentView(假设图像的大小始终相同)。这样你最终会在TableViewDatasource中得到类似的东西:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString *CellIdentifier = @"Cell";

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    if (cell == nil) {
        cell = [[[CustomTableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease];
    }

    return cell;
}

- (void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath
{
    NSString *fileName = (NSString *)_movies[indexPath.row];
    UIImage *thumbnail = [UIImage imageWithContentsOfFile:_movieThumbnails[indexPath.row]];

    [cell.textLabel setText:fileName];
    [cell.imageView setImage:thumbnail];
}

此外,如果您的目标是iOS 6及更高版本,则可以在registerClass:forCellReuseIdentifier:中使用UITableView并简化上面的代码(使用分配表格视图单元删除样板代码)。