给角半径时,TabelView单元是否在抖动?

时间:2016-04-01 04:34:11

标签: ios objective-c iphone uitableview uiimageview

我的要求是在表格视图单元格中显示圆形图像。为了这个目的,在行的单元格中我给出了我的imageview出口的角半径,现在图像以圆形格式显示但是当滚动单元格摇动时如果我停止角落半径代码正常工作可以任何人告诉我这个问题吗?

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

    NSString *cellIdentifier =@"notification";

    NotifiucationTableViewCell *cell =[tableView dequeueReusableCellWithIdentifier:cellIdentifier];
    if (cell == nil) {
        cell = [[NotifiucationTableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:cellIdentifier];
    }

    ZSAnnotation *objArray = [personDetails objectAtIndex:indexPath.row];
    [cell.profilePic sd_setImageWithURL:[NSURL URLWithString:objArray.personImage]
                       placeholderImage:[UIImage imageNamed:@"profile-pic-big.png"]];

    cell.personDescription.text = objArray.personDescription;
    cell.personTitle.text = objArray.personTitle;
    myString =  [[NSNumber numberWithFloat:objArray.rating] stringValue];
    km = [NSString stringWithFormat:@"%@%@", myString, @" KM"];

    cell.personNearbyDistance.text = km;
    [cell.callButton addTarget:self action:@selector(callButtonAction:) forControlEvents:UIControlEventTouchUpInside];
    cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator;
    cell.selectionStyle = UITableViewCellSelectionStyleNone;
    cell.backgroundColor = [UIColor whiteColor];
    cell.profilePic.layer.cornerRadius = 30;

    return cell;
}

3 个答案:

答案 0 :(得分:0)

尝试将单元格UI设置放在单元格类的“awakeFromNib”方法中,例如:

- (void)awakeFromNib{
    self.imageView.layer.cornerRadius = 30;
}

因为UITableViewCell总是被重用,如果您尝试在“cellForRowAtIndexPath”方法中更新单元格的UI,则每次显示单元格之前都会执行代码,但如果您将代码放在“awakeFromNib”中,则代码可能只会执行当tableView加载时几次,当你向上和向下滚动时不会再次执行,并且单元格显得平滑。

答案 1 :(得分:0)

我认为你可以在细胞内部给出角半径。 单元格闪烁的原因是,当在cellForItemAtIndexPath方法中滚动表视图时,tableView会尝试对单元格进行双层格式化,这会导致单元格闪烁。

你可以从nib清醒中做到这一点

-(void) awakwFromNib  
{
  self.yourImageView.cornerRadius = 30;
  self.yourImageView.layer.maskToBounds = YES;
}

答案 2 :(得分:0)

尝试替换

cell.profilePic.layer.cornerRadius = 30;

if (cell.profilePic.layer.cornerRadius != 30){
    cell.profilePic.layer.cornerRadius = 30;
    cell.profilePic.clipsToBounds = YES;
}

这样,创建单元格时半径只会应用一次。