ios不能改变cellforrowatindexpath中图像的角半径

时间:2014-05-12 17:55:15

标签: ios objective-c uitableview cocoa-touch uiimageview

我正试图在cellforrowatindexpath中绕过图像的角落,如下所示:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString *CellIdentifier = @"MyCell";
    MyTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    NSString *identifiers = _identifiers[indexPath.row];

    if([identifier isEqualToString:@"bronze"]){
        cell.imageView.image = [UIImage imageNamed:@"bronze.png"];
        cell.imageView.layer.cornerRadius = cell.imageView.frame.size.width / 2;
        cell.imageView.clipsToBounds = YES;
    }



    return cell;
}

然而,这不起作用。我做错了什么?

2 个答案:

答案 0 :(得分:1)

在设置图片后立即尝试呼叫:

[cell layoutSubviews];

我不认为这是最好的方法,但这是一个可行的黑客。 这已经过测试。

编辑(为清晰起见):

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString *CellIdentifier = @"MyCell";
    MyTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    NSString *identifiers = _identifiers[indexPath.row];

    if([identifier isEqualToString:@"bronze"]){
        cell.imageView.image = [UIImage imageNamed:@"bronze.png"];
        [cell layoutSubviews];
        cell.imageView.layer.cornerRadius = CGRectGetWidth(cell.imageView.frame) / 2;
        cell.imageView.clipsToBounds = YES;
    } else {
        cell.imageView.image = nil;
        cell.imageView.layer.cornerRadius = 0;
    }

    return cell;
}

答案 1 :(得分:0)

此时imageView的帧为(0,0,0,0)。所以cell.imageView.frame.size.width为0.因此,您的代码将cornerRadius再次设置为0,这是一个无操作。

您可以对cornerRadius的值进行硬编码,或者您可以对表格视图单元格进行子类化并覆盖-layoutSubviews