【问题标题】:TabelView Cells are shaking when giving corner radius?给角半径时,TableView 单元格在晃动?
【发布时间】:2016-07-20 18:36:09
【问题描述】:

我的要求是在表格视图单元格中显示圆形图像。为此,在行的单元格中,我为我的 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;
}

【问题讨论】:

  • 您签入设备了吗?你有问题吗?
  • 是的,我签入了 iPad,但遇到了问题
  • 可以上传截图吗?
  • 添加“cell.profilePic.layer.masksToBounds = YES;”

标签: ios objective-c iphone uitableview uiimageview


【解决方案1】:

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

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

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

【讨论】:

    【解决方案2】:

    我认为您可以在单元格本身内给出角半径。 单元格闪烁的原因是,当表格视图在cellForItemAtIndexPath 方法中滚动时,tableView 会尝试将单元格从队列中取出,从而导致单元格闪烁。

    你可以在笔尖清醒时这样做

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

    【讨论】:

      【解决方案3】:

      尝试替换

      cell.profilePic.layer.cornerRadius = 30;
      

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

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

      【讨论】:

        猜你喜欢
        • 2016-03-31
        • 2016-06-14
        • 1970-01-01
        • 2021-03-02
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多